Shikata Ga Nai

Private? There is no such things.

バックアップファイルによるソースコード漏洩 ― 見落とされた「\~」「.bak」が重大な脆弱性に

Hello there, ('ω')ノ

🧪 なぜソースコードが漏れるのか?

  • .php.jsp などの拡張子を持つファイルは、Webサーバーが実行してからレスポンスを返す
  • そのため通常はファイルを直接取得しても、ソースコードは見えない。

しかし…

  • テキストエディタやIDEが生成する「一時バックアップファイル」は、以下のようなファイル名になります:

    • index.php~
    • index.php.bak
    • index.php.save
    • copy of index.php
  • これらは通常のテキストファイルと認識され、サーバーがそのまま中身を返してしまう可能性があります。

🔍 ペンテスターが狙う典型的パターン

攻撃手法 説明
GET /index.php~ Emacs系エディタのバックアップ
GET /index.php.bak Windowsメモ帳やVisual Studioの自動保存
GET /index.php.save GeditなどのLinux系エディタ
GET /index.php.old 手動で保存された旧バージョン
GET /.git/config バージョン管理情報からパスのヒントを得る

🧑‍💻 攻撃者がソースを入手したら?

  • パラメータの使い方、認証処理、トークンの構造などが完全に把握できる。
  • DB_PASSWORD = "admin123" のようなハードコーディングがあれば 直接データベースにアクセス可能
  • CSRFトークン生成方法や署名処理が分かれば 偽造リクエストも可能

📋 Burp Suite を使った調査手順

  1. robots.txt, sitemap.xml などからファイル名のヒントを得る。
  2. Burp Intruder.php~, .php.bak, .php.save などの拡張子を試す。
  3. レスポンスのContent-Typetext/plain, text/html で本文がコードっぽければヒット。
  4. 抽出されたコードから認証処理やAPIエンドポイントの特定を行う。

🛡 開発者向け防御策

対策 内容
バックアップファイルはアップロードしない 自動生成ファイルは .gitignore などで除外
サーバー設定で拡張子ベースで拒否 .bak, .~, .old ファイルへのアクセスを403にする
CI/CD時に検査ルールを追加 セキュリティチェックで余計なファイルが含まれていないか確認

✅ まとめ

  • ソースコードそのものが漏れれば、攻撃は「推測」ではなく「攻略」になる
  • バックアップファイルは人間の操作ミスや開発習慣によってうっかり公開されがち
  • ペンテスト時には .bak, .php~, .save を必ず試してみよう。

🔐 守るべきは「本番のコード」だけではない。残骸・一時ファイル・古いバージョンもまた攻撃対象になりうるのです。

Best regards, (^^ゞ