脆弱性リファレンス
Security Scanner MCPで検出されるすべての脆弱性タイプの完全なリファレンス。
1.2.0の検出セマンティクス
JavaScript / TypeScriptのinjection、XSS、crypto、auth、path検出はASTベースです。
- 関数パラメータtaintがSQL、MongoDB、command、file-system sinkに到達するフローを検出します。
req.body.file→f→normalized→fs.readFileのような複数段階の変数フローを検出します。res.setHeader('Access-Control-Allow-Origin', '*')のCORSワイルドカードを検出します。- 複数段階taintによる平文パスワード保存を検出します。
innerHTMLの静的なリテラルHTMLはXSSとして報告せず、動的な値だけを報告します。
OWASP Top 10:2021マッピング
A01:2021 - Broken Access Control
検出対象:
- 認可チェックの欠落
- 安全でない直接オブジェクト参照
- パストラバーサル脆弱性
例:
// 脆弱
app.get('/user/:id/data', (req, res) => {
const data = getUserData(req.params.id); // 認可チェックなし
res.json(data);
});
A02:2021 - 暗号化の失敗
検出対象:
- 弱いハッシング(MD5、SHA1)
- ハードコードされた暗号化キー
- 安全でない乱数生成
- SSL/TLSなし
- 脆弱なTLSバージョン
例:
// 脆弱
const hash = crypto.createHash('md5');
const key = "hardcoded_key_123";
A03:2021 - インジェクション
検出対象:
- SQLインジェクション
- NoSQLインジェクション
- コマンドインジェクション
- LDAPインジェクション
- 式言語インジェクション
例:
// SQLインジェクション
const query = `SELECT * FROM users WHERE id = ${userId}`;
// コマンドインジェクション
exec(`ping ${userInput}`);
// NoSQLインジェクション
db.users.find({ username: req.body.username });
A04:2021 - 安全でない設計
検出対象:
- セキュリティコントロール欠落
- 不十分な入力検証
- ビジネスロジックの欠陥
A05:2021 - セキュリティミスコンフィグレーション
検出対象:
- デフォルト認証情報
- 不要な機能が有効
- 不正なエラーハンドリング
- セキュリティヘッダーなし
- IaCミスコンフィグレーション
例:
// 詳細なエラーメッセージ
app.use((err, req, res, next) => {
res.status(500).json({ error: err.stack }); // 内部を公開
});
A06:2021 - 脆弱で古いコンポーネント
検出対象:
- 依存関係の既知のCVE
- 古いパッケージ
- 脆弱なフレームワーク
検出方法:
- npm audit統合
- CVEデータベース検索
- バージョンチェック
A07:2021 - 認証と認可の失敗
検出対象:
- ハードコードされた認証情報
- 弱いパスワードポリシー
- 安全でないセッション管理
- MFAなし
- JWTのミスコンフィグレーション
例:
// ハードコードされた認証情報
const dbPassword = "admin123";
// 弱いJWT
jwt.sign(payload, 'weak_secret', { algorithm: 'none' });
// 安全でないクッキー
res.cookie('session', token); // httpOnlyとsecureフラグがない
A08:2021 - ソフトウェアとデータの整合性の失敗
検出対象:
- 整合性チェックの欠落
- 安全でないデシリアライゼーション
- 検証されていないアップデート
例:
# 安全でないデシリアライゼーション
import pickle
data = pickle.loads(user_input)
A09:2021 - セキュリティログと監視の失敗
検出対象:
- 監査ログの欠落
- 不十分な監視
- ログインジェクション
A10:2021 - Server-Side Request Forgery(SSRF)
検出対象:
- 検証されていないURL
- 内部ネットワークアクセス
- クラウドメタデータアクセス
例:
// SSRF
const url = req.query.url;
axios.get(url); // 検証なし
CWEマッピング
CWE-78: OS コマンドインジェクション
// 脆弱
child_process.exec(`git clone ${repo_url}`);
// 安全
child_process.execFile('git', ['clone', repo_url]);
CWE-79: Cross-Site Scripting(XSS)
// 脆弱
element.innerHTML = userInput;
// 安全
element.textContent = userInput;
CWE-89: SQLインジェクション
// 脆弱
db.query(`SELECT * FROM users WHERE id = ${id}`);
// 安全
db.query('SELECT * FROM users WHERE id = ?', [id]);
CWE-200: 情報公開
// 脆弱
console.log(error.stack);
res.json({ error: error.message, stack: error.stack });
// 安全
logger.error(error);
res.json({ error: 'Internal server error' });
CWE-259: ハードコードされたパスワード
// 脆弱
const password = "admin123";
// 安全
const password = process.env.DB_PASSWORD;