
Runtipiにおけるバックアップ復元時のシンボリックリンク植え付けを介した認証済み任意ファイル書き込みを実証するCVE-2026-55168の概念実証エクスプロイト
このリポジトリは、Runtipi における CVE-2026-55168 のシンプルなPoCを含んでいます。
この問題は、バックアップ復元フローを介して到達可能な認証済み任意ファイル書き込みです。細工されたバックアップアーカイブは、復元されたアプリケーションデータにシンボリックリンクを仕掛け、その後の通常の設定更新がそのシンボリックリンクをたどって、意図されたディレクトリの外に攻撃者が制御するコンテンツを書き込みます。
参考アドバイザリ:
影響を受けるバージョン:
<= 4.10.0PoCはRuntipiにログインし、メモリ内に悪意のあるバックアップアーカイブを作成し、それをアップロードし、復元をトリガーし、その後通常の user-config 更新リクエストを送信します。
復元ペイロードは次のシンボリックリンクを仕掛けます:
user-config/app.env -> /data/state/proof.txt
その後、アプリ設定を更新する通常のリクエストにより、Runtipiが指定されたコンテンツを次の場所に書き込みます:
/data/state/proof.txt
重要なのは、復元中のシンボリックリンクの永続性だけでなく、後に行われる正当な書き込みが仕掛けられたシンボリックリンクをたどるという点です。
poc.py — エンドツーエンドのPython PoCpython poc.py \
--base-url http://127.0.0.1:3001 \
--username YOUR_USERNAME \
--password YOUR_PASSWORD \
--app-urn demoapp3:_user \
--target-path /data/state/proof.txt \
--write-content PWNED_FROM_USERCFG_WRITE
必要に応じて、生成されたアーカイブをローカルに保存することもできます:
python poc.py \
--base-url http://127.0.0.1:3001 \
--username YOUR_USERNAME \
--password YOUR_PASSWORD \
--output payload.tar.gz
ターゲットが脆弱な場合、スクリプトは正常に終了し、status: "ok" を含む小さなJSON結果を出力します。
このPoCは研究および再現目的で提供されています。