
Web、API、LLMを対象としたアプリケーションセキュリティテスト、セキュアコードレビュー、CI/CDパイプラインへのセキュリティ実装を練習するための、意図的に脆弱なWebアプリケーションです。
⚠️ 警告:このアプリケーションは意図的に脆弱性を含んでおり、教育目的でのみ隔離された環境で使用してください。

このプロジェクトは、複数のセキュリティ脆弱性を組み込んだシンプルなバンキングアプリケーションです。セキュリティエンジニア、開発者、インターン、QAアナリスト、DevSecOps実践者が以下について学ぶために設計されています:
USD、GBP、NGN、JPY、EUR、QAR、BTC、ETH)
認証と認可
データセキュリティ
取引の脆弱性
ファイル操作
セッション管理
クライアントおよびサーバーサイドの欠陥
バーチャルカードの脆弱性
請求書支払いの脆弱性
マーチャント決済APIの脆弱性
AIカスタマーサポートの脆弱性
GraphQLの脆弱性
/graphql に継承される脆弱なJWTベース認証git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
docker-compose up -d --build
アプリケーションは http://localhost:5000 で利用可能になります。
Dockerセットアップには、手動のSSH介入なしでアプリが復旧できるようにするための運用上のセーフガードがいくつか含まれています:
web と db は restart: unless-stopped を使用するため、プロセスが終了した場合にDockerが自動的に再起動します。db はヘルスチェックを公開し、web は起動前にPostgresの準備完了を待ちます。web は debug=True でFlask開発サーバーを実行します(意図的。Werkzeugデバッガーを対象としたトレーニングシナリオを維持するため)。web は GET /healthz を公開し、コンテナがアプリとデータベースが実際に使用可能かどうかを報告できるようにします。これにより、意図的に脆弱なアプリケーションの動作を維持しながら、コンテナのライフサイクルをより堅牢にします。
実際のコンテナを起動せずに、ローカルのランタイム構成を検証できます:
python3 -m unittest discover -s tests -v
これにより /healthz エンドポイントの動作をチェックし、start.sh がデータベースを待ってからFlaskアプリを起動することを検証します。
現在のPython環境にFlaskアプリの依存関係がインストールされていない場合は、/healthz ルートのテストはスキップされ、起動スクリプトのスモークテストは引き続き実行されます。
git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
docker build -t vuln-bank .
docker run -p 5000:5000 vuln-bank
git clone https://github.com/Commando-X/vuln-bank.git
cd vuln-bank
# Windowsの場合
python -m venv venv
venv\Scripts\activate
# Linux/Macの場合
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Windowsの場合
mkdir static\uploads
# Linux/Macの場合
mkdir -p static/uploads
.envファイルを変更します:
アプリケーションを実行します:
# Windowsの場合
python app.py
# Linux/Macの場合
python3 app.py
.env ファイルは、教育目的での簡単なセットアップを促進するために、このリポジトリに意図的に含まれています。実際のアプリケーションでは、.env ファイルをバージョン管理にコミットしてはいけません。
現在の環境変数:
DB_NAME=vulnerable_bank
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=db # ローカルインストールの場合は 'localhost' に変更
DB_PORT=5432
このアプリケーションはPostgreSQLを使用します。アプリケーションを初めて実行するとデータベースが自動的に初期化され、以下を作成します:
http://localhost:5000http://localhost:5000/api/docshttp://localhost:5000/graphql"python not found" エラーが発生する場合:
python の代わりに py を使用してみてくださいuploadsフォルダの権限の問題:
ディレクトリ作成時にPermission deniedエラーが発生する場合:
sudo mkdir -p static/uploads
sudo chown -R $USER:$USER static/uploads
ポート5000がすでに使用されている場合:
# ポート5000を使用しているプロセスを終了
sudo lsof -i:5000
sudo kill <PID>
接続が拒否された場合:
.env ファイルの認証情報を確認してください認証に失敗した場合:
.env の DB_PASSWORD がPostgresユーザーのパスワードと一致していることを確認してください。
または、postgres ユーザーを次のコマンドでリセットします:
ALTER ROLE postgres WITH PASSWORD 'your_password';
インストールエラーが発生した場合:
PostgreSQLのエラーが発生した場合は、Chocolateyでインストールし、パスワードを postgres に設定します:
choco install postgresql --version=17.4.0 -y
# 生成されたパスワードを使用するか、すぐにリセットします:
& 'C:\Program Files\PostgreSQL\17\bin\psql.exe' -U postgres -c "ALTER ROLE postgres WITH PASSWORD 'postgres';"
データベースが存在しない場合:
手動で作成します:
CREATE DATABASE vulnerable_bank;
または、次のコマンドを実行します:
createdb -U postgres -h localhost vulnerable_bank