Skip to main content

Snyk CodeとSymbolic AIでセキュリティ課題を解決

著者
blog feature ai pink

2025年2月27日

0 分で読めます

コードパスを分析し、セキュリティ脆弱性を検出する自動化されたエキスパートシステムとして、Symbolic AIはどれほど優れているのでしょうか?Snyk Codeをテストし、ルールベースのアルゴリズムシステムの利点を実証します。

SnykのSymbolic AIセキュリティエンジンとは?

コードベースの静的セキュリティ分析を行うSnykのSASTエンジンは、Symbolic AIシステムを基盤としており、より高い精度と高速な実行を実現します。また、セキュリティ研究者の専門知識を深く活用し、脆弱性ルールを基盤とするセキュリティエキスパートシステムを提供します。

こうしたSnyk Codeの特長により、従来のパターンマッチング(grepのような正規表現検索)より優れた技術で、コード内の脆弱性を検出できます。

SASTがコードセキュリティの課題を解決

Florin Walterは、セキュリティの実務家であり、ペネトレーションテスターです。ここ数カ月、LinkedInでセキュリティ課題やセキュアコーディングのクイズ記事を共有しています。

さまざまなプログラミング言語のコードに潜む脆弱性をSnykが検出できるか気になり、Florinのコードリポジトリをインポートしました。この記事の続きで、その検出結果を見ていきます。

PythonのFlaskアプリケーションにおけるオープンリダイレクト

Flaskは、Pythonで人気のWebアプリケーションフレームワークです。次のPythonコードでは、異なるルートを使ってホームページとログインページを表示します。

from flask import Flask, request, redirect, url_for
import logging

app = Flask(__name__)

logging.basicConfig(level=logging.INFO)

def is_authenticated_user():
    # This function checks if the user is authenticated and is omitted for brevity
   pass

@app.route('/')
def home():
    if not is_authenticated_user():
        logging.info('Unauthorized access attempt.')
        return redirect(url_for('login'))

    redirect_url = request.args.get('redirect_url')
    if redirect_url:
        logging.info(f'Redirecting to: {redirect_url}')
        return redirect(redirect_url)

    return 'Welcome to the home page!'

@app.route('/login')
def login():
    # Simulated login page
    return 'Login Page - User authentication goes here.'

if __name__ == '__main__':
    app.run(debug=False)

しかし、ユーザーやシステム間でリダイレクト先URLを指定できるため、オープンリダイレクトの脆弱性が潜んでいます。

開発者は、プロダクトバックログにある製品関連のタスクを優先するあまり、見落としてしまうかもしれません。それでも、SnykはこのPythonコードに静的アプリケーションセキュリティテストを実行し、オープンリダイレクトの脆弱性を検出できます。

Snyk CodeがPython Flaskアプリケーションのオープンリダイレクト脆弱性を検出

Snykは、安全でないコードを検出するだけにとどまりません。オープンソースコミュニティから得たセキュリティ上の欠陥とその修正をSnykの機械学習エンジンが分析することで、開発者がコードに適用できるセキュリティ修正を推定して提案し、このオープンリダイレクトの脆弱性を解消できます。

以下は、Snykが提案する3つのコード修正のうち1つのスクリーンショットです。脆弱性の防止に関するベストプラクティスと、この種のセキュリティ脆弱性についてのコンテキスト情報も表示されています。

Snykの修正分析が、セキュリティ脆弱性を解消するコード修正を提案します。

Node.jsアプリケーションのJavaScriptコードにおけるSSRFとXSS

次のセキュリティ課題はJavaScriptで書かれており、Expressで構築されたサーバーサイドのNode.js Webアプリケーションを題材にしています。

const express = require('express');
const axios = require('axios');

const app = express();

app.get('/profile', (req, res) => {
    console.log('Received request for /profile');

    // Simulated profile data
    const profileData = {
        name: 'John Doe',
        role: 'Developer'
    };

    res.json(profileData);
    console.log('Sent profile data response');
});

app.get('/fetch-data', async (req, res) => {
    const url = req.query.url;
    console.log(`Received request for /fetch-data with URL: ${url}`);

    try {
        const response = await axios.get(url);
        res.send(response.data);
        console.log(`Data fetched and sent for URL: ${url}`);
    } catch (error) {
        console.error(`Error fetching data from URL: ${url}`, error);
        res.status(500).send('Error fetching data');
    }
});

app.listen(3000, () => {
    console.log('Server running on port 3000');
});

コードに目を通して、セキュリティ脆弱性を見つけてみてください。

この課題もSnykにインポートしました。以下は、Snykが検出した複数の問題です。

Axiosを使用したサーバーサイドリクエストフォージェリ(SSRF)

Snykは、HTTPパラメーター(req.query.url)から取得したサニタイズされていない入力が、24行目のHTTPクライアントライブラリaxiosに渡されていることを検出しました。このurl変数は、HTTPリクエストの送信先となるリモートURLを指定します。

ユーザーがURL全体を制御できるため、http://localhostのような内部アドレスや、データの収集・情報の抽出に使えるその他の内部IPアドレスや予約済みIPアドレスを指定し、悪用する可能性があります。

Snykは、脆弱性の影響を受けるすべてのコードパスと関連するコード行を示し、安全でないコードを次のように特定しました。

Snykが検出した、axiosを使用するコードのSSRF脆弱性

ExpressのHTTPレスポンスにおけるクロスサイトスクリプティング脆弱性

上記のコードでは、完全なURLを制御可能な変数を使ってHTTPリクエストを送信するため、SSRFの脆弱性があります。Snykはさらに別の脆弱性も検出しました。

ExpressのHTTPレスポンスにおけるクロスサイトスクリプティングの脆弱性

次の問題は見つけにくく、SSRFだけの問題ではありません。Snykの分析で25行目にハイライトされたコードに注目すると、HTTPレスポンスがそのままブラウザーに送信されていることがわかります。

res.send(response.data)

ExpressはデフォルトでHTTPレスポンスヘッダーをapplication/htmlに設定します。つまり、攻撃者がリモートサーバーを制御できる場合、悪意あるJavaScriptコードを埋め込んでクライアント側でXSSを引き起こし、ブラウザーにHTMLレスポンス全体を解釈させることができます。

Snykが検出するもう1つの安全でないコードの問題は、CRLFインジェクションの可能性です。上記のExpress Webアプリケーションコードのこの部分を見てみましょう。

    try {
        const response = await axios.get(url);
        res.send(response.data);
        console.log(`Data fetched and sent for URL: ${url}`);
    } catch (error) {
        console.error(`Error fetching data from URL: ${url}`, error);
        res.status(500).send('Error fetching data');
    }

SnykのSASTは、脆弱性の検出結果の一部として、このCRLFインジェクションの可能性も簡単に検出します。

ユーザー制御入力によるCRLFインジェクション

Snykはどのようにコードをセキュリティ脆弱性から守るのですか?

Snykの静的アプリケーションセキュリティテストツールSnyk Codeを使えば、IDE内に安全でないコードの検出結果がリアルタイムで表示され、開発者はコードの脆弱性を見つけられます。

無料で今すぐ始めましょう。VS Code Snyk拡張機能をインストールして、セキュリティのバグを一掃しましょう!

SnykのVS Code拡張機能のスクリーンショット

無料のオンラインコードチェッカーツール

次のコミットの前に、コードを安全に保護しましょう。

続きを読む

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSecのご紹介:AI開発のスピードに追随するセキュリティ

AIを活用した開発は、従来のセキュリティワークフローを上回るスピードで進んでいます。SnykのAgentic AppSecは、セキュリティエージェントが脆弱性を継続的に検出、修正、検証し、人が基準を定められるようにします。

blog feature ai violet
Blog

VulnBump:AIエージェントはビルドを壊さずに脆弱な依存関係を修正できるか?

VulnBumpでは、実際の依存関係のアップグレード307件をAIエージェントで検証します。脆弱性が解消され、ビルドとテストが正常に通った場合にのみ、修正成功と判定します。

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。