コードセキュリティスキャン
Security Scanner MCPは複数のプログラミング言語を対象とした包括的なコードセキュリティスキャンを提供します。
サポートされている言語
- JavaScript / TypeScript
- Python
- Java
- Go
1.2.0のASTベース検出
JavaScript / TypeScriptでは、injection、XSS、crypto、auth、pathスキャナーがASTを解析して、regexだけでは見落としやすいデータフローを追跡します。
- 関数パラメータtaintと複数段階の変数チェーンを検出します。
innerHTMLへの静的なリテラルHTMLはXSSとして報告せず、動的な値だけを報告します。res.setHeader('Access-Control-Allow-Origin', '*')形式のCORSワイルドカードを検出します。- Python / Java / GoとJS/TSのパース失敗時は従来のregexパスを使用します。
脆弱性カテゴリ
🔑 ハードコードされたシークレット
ソースコード内にハードコードされたAPIキー、パスワード、トークンを検出します。
検出対象:
- AWS アクセスキーとシークレットキー
- Google APIキーとOAuthシークレット
- GitHubトークン
- Slackトークン
- データベース接続文字列
- 秘密鍵(RSA、EC、SSH)
- JWTトークン
- Stripe、Twilio、SendGrid APIキー
- 韓国サービス(KakaoやNaverのAPIキー)
例:
// ❌ 脆弱
const apiKey = "AIzaSyC1234567890abcdef";
const awsKey = "AKIAIOSFODNN7EXAMPLE";
// ✅ 安全
const apiKey = process.env.GOOGLE_API_KEY;
const awsKey = process.env.AWS_ACCESS_KEY_ID;
💉 インジェクション脆弱性
SQLインジェクション:
// ❌ 脆弱 - 文字列連結
const query = "SELECT * FROM users WHERE id = " + userId;
const query = `SELECT * FROM users WHERE id = ${userId}`;
// ❌ 脆弱 - 関数パラメータtaint
function search(input) {
db.query(`SELECT * FROM users WHERE name = ${input}`);
}
search(req.body.name);
// ✅ 安全 - プリペアドステートメント
const query = "SELECT * FROM users WHERE id = ?";
db.query(query, [userId]);
NoSQLインジェクション:
// ❌ 脆弱
db.collection.find({ username: req.body.username });
// ✅ 安全
const username = validator.escape(req.body.username);
db.collection.find({ username });
コマンドインジェクション:
// ❌ 脆弱
exec(`ping ${userInput}`);
// ✅ 安全
execFile('ping', [userInput]);
🌐 Cross-Site Scripting(XSS)
検出パターン:
- Reactの
dangerouslySetInnerHTML innerHTML/outerHTML代入- jQuery
.html()メソッド - Vue
v-htmlディレクティブ eval()とnew Function()document.write()
例:
// ❌ 脆弱
element.innerHTML = userInput;
element.dangerouslySetInnerHTML = { __html: userInput };
// ✅ 安全
element.textContent = userInput;
// またはDOMPurifyを使用
import DOMPurify from 'dompurify';
element.innerHTML = DOMPurify.sanitize(userInput);
🔐 暗号化の問題
検出対象:
- 弱いハッシュアルゴリズム(MD5、SHA1)
- 安全でない乱数生成(
Math.random()) - ハードコードされた暗号化キー/IV
- SSL証明書検証無効化
- 脆弱なTLSバージョン(1.0、1.1)
例:
// ❌ 脆弱
const hash = crypto.createHash('md5');
const random = Math.random();
// ✅ 安全
const hash = crypto.createHash('sha256');
const random = crypto.randomBytes(32);
🔒 認証とセッションセキュリティ
JWT問題:
noneアルゴリズムが許可- 有効期限なし
- 弱い秘密鍵
クッキーセキュリティ:
httpOnlyフラグなしsecureフラグなしsameSite属性なし
CORS問題:
- 本番環境でのワイルドカードオリジン
- ワイルドカードでのクレデンシャル
例:
// ❌ 脆弱
res.cookie('session', token);
app.use(cors({ origin: '*', credentials: true }));
// ✅ 安全
res.cookie('session', token, {
httpOnly: true,
secure: true,
sameSite: 'strict'
});
app.use(cors({
origin: 'https://yourdomain.com',
credentials: true
}));
📁 ファイルとパスの脆弱性
パストラバーサル:
// ❌ 脆弱
const file = fs.readFileSync(req.query.path);
// ✅ 安全
const safePath = path.join(SAFE_DIR, path.basename(req.query.path));
const file = fs.readFileSync(safePath);
危険なファイル操作:
- ユーザー入力による再帰削除
- 安全でないファイルアップロード
- Zip Slip脆弱性(Java)
- Pickleデシリアライゼーション(Python)
使用方法
すべての脆弱性タイプをスキャン
Me: このコードをセキュリティの問題についてスキャンしてください
[コードを貼り付け]
Claudeは全スキャナーを実行するscan-securityツールを使用します。
特定の脆弱性タイプをスキャン
フォーカスされたスキャンに個別ツールを使用:
scan-secrets- シークレット検出のみscan-injection- インジェクション脆弱性 のみscan-xss- XSSリスクのみscan-crypto- 暗号化の問題のみscan-auth- 認証/セッションの問題のみscan-path- ファイル/パスの脆弱性のみ
外部ツール統合
Dockerサンドボックスで実行する場合、スキャナーは以下も使用します:
- GitLeaks v8.18.4 - エントロピー分析によるシークレット検出の強化
- 業界が実証した検出パターンとルール
- 誤検知の少ない
次のステップ
- IaCスキャン - インフラストラクチャファイルをスキャン
- 自動修正 - 自動修正提案を取得
- サンドボックススキャン - 隔離環境で実行