
phpMyAdmin 5.2.3 - उच्च - रिमोट - CSRF - /sql पर टोकन स्ट्रिप
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · phpmyadmin-csrf-sql
Class: CSRF Reach: Remote
phpMyAdmin 5.2.3 (tag RELEASE_5_2_3, commit 962857e)। Common.php checkTokenRequestParam से पहले globals से PSR-7 request बनाता है। बेमेल होने पर, Sanitize::removeRequestVars $_POST और $_GET को साफ़ करता है लेकिन उस snapshot को नहीं। फिर $sql_query को $request->getParsedBodyParam('sql_query') से कॉपी किया जाता है। AJAX POSTs token बेमेल होने पर रुक जाते हैं। Non-AJAX POSTs जारी रहते हैं। SqlController stripped $_POST['sql_query'] को प्राथमिकता देता है और अन्यथा global को रखता है।
phpMyAdmin session cookie वाला victim पर्याप्त है। index.php?route=/sql पर sql_query के साथ POST करें और कोई valid token नहीं, और ajax_request के बिना। SELECT उस MySQL user के रूप में चलता है। 5.2.3 में डिफ़ॉल्ट CookieSameSite=Strict कई cross-site browsers को रोकता है। Same-site, Lax, None, या HTTP-auth अभी भी इसे हिट करते हैं। यह किसी भी तरह से एक टूटा हुआ CSRF नियंत्रण है।
| ID | अभी तक कोई CVE नहीं |
| Class | CSRF |
| Reach | Remote। डिफ़ॉल्ट CookieSameSite=Strict कई cross-site browsers को रोकता है। Same-site / Lax / None / HTTP-auth शेष हैं। |
| CWE | CWE-352 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N |
| Product | phpMyAdmin |
| Affected | 5.2.3 tag RELEASE_5_2_3 (962857e) |
| Auth | Victim phpMyAdmin session cookie (या HTTP auth)। कोई valid CSRF token नहीं। |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1:19240 |
कोई भी जो victim browser को ajax_request के बिना phpMyAdmin पर POST करा सकता है, उस MySQL user के रूप में SQL चला सकता है।
| Privilege | Method / path | Lab-proven या inferred |
|---|---|---|
| Victim MySQL account के रूप में attacker SQL चलाएँ (उस SQL box की integrity + recon) | POST index.php?route=/sql sql_query=... db=... no token, no ajax_request | Lab-proven। Results body में PMA-CSRF-SQL-WITNESS था। General log ने SELECT को appuser के रूप में दिखाया |
| AJAX पर उसी handler को रोकें | Same POST with ajax_request=1 | Lab-proven। Token mismatch। INSERT marker row अनुपस्थित। General log ने वह INSERT नहीं चलाया |
उन handlers को छोड़ें जो केवल stripped $_POST पढ़ते हैं | POST /database/structure/drop-table without a token | Lab-proven। keepme अभी भी मौजूद |
export (SaveDir), partition DROP/TRUNCATE, account lock, /config/set, pmadb create पर वही gap | कोई भी handler जो strip के बाद PSR-7 body पढ़ता है | Inferred। परीक्षण नहीं किया गया |
इस lab पर बंद: unauthenticated PMA (पहले cookie login आवश्यक), AJAX routes (वे mismatch पर exit करते हैं), drop-table without a token, OS shell। डिफ़ॉल्ट Strict SameSite का मतलब है कि एक classic cross-site form अक्सर cookie नहीं भेजेगा; शेष अभी भी same-site और Lax/None deploys पर एक विफल CSRF जाँच है।
RELEASE_5_2_3 की आठ समानांतर source hunts। Common.php checkTokenRequestParam() से पहले $request = createFromGlobals() बनाता है। Mismatch पर, Sanitize::removeRequestVars() केवल $_POST/$_GET साफ़ करता है। Non-AJAX जारी रहता है। SqlController global $sql_query का उपयोग करता है यदि $_POST खाली है। Route GET|POST /sql।
गलत मोड़: AJAX /sql को leftover मानना (यह Token mismatch पर abort करता है); drop-table को leftover मानना (वह handler केवल stripped $_POST पढ़ता है); डिफ़ॉल्ट Strict SameSite को "CSRF बंद है" मानना (नियंत्रण अभी भी टूटा हुआ है; same-site / Lax / None शेष हैं)।
python3 phpmyadmin-csrf-sql-Abraxas-Labs.py
या
cd lab
./run.sh
केवल loopback: http://127.0.0.1:19240। Images phpmyadmin:5.2.3 और mysql:8.0। Compose project phpmyadmin-csrf-sql। PoC एक same-site loopback POST है (Strict SameSite अभी भी cookie भेजता है)। Witness PMA-CSRF-SQL-WITNESS।
SUCCESS phpmyadmin-csrf-sql sql-ran=yes ajax-abort=yes drop-held=yes PMA-CSRF-SQL-WITNESS
Mismatch पर, request को खाली body से बदलें, या सभी POSTs को अस्वीकार करें, केवल AJAX को नहीं। stale request से sql_query कॉपी न करें। logout की तरह fail closed करें।
962857e)libraries/classes/Common.php token strip से पहले request snapshotSanitize::removeRequestVars केवल $_POST/$_GET साफ़ करता हैSqlController global $sql_queryGNU Affero GPL v3.0। देखें LICENSE। केवल loopback lab। कोई warranty नहीं।