コンテンツへスキップ
Guide

エージェント アプリの OWASP トップ 10: API 開発者が変更する必要があるもの

| 10 min read

OWASP エージェント アプリのトップ 10 リストには、既存の API セキュリティが見逃されるリスクがあります。 API 開発者が今週出荷できる 5 つの修正とコード。

Shield icon on dark background representing application security framework
Photo by FLY:D on Unsplash

API にはレート制限、BOLA チェック、入力検証があります。 AI エージェントは、次の方法で 3 つすべてをバイパスします。 6 つの承認されたエンドポイントを、脅威モデルが考慮したことのない特権昇格パスに連鎖させます。 2026 年初頭の報告における 520 件のツール誤用インシデントは、これが理論上のものではないことを裏付けています。

OWASP は、100 人以上のセキュリティ研究者によって構築された 2026 年のエージェント アプリケーションのトップ 10 を発表しました。 Cisco、Microsoft、Google、およびより広範なコミュニティ。 このリストは、新たな脅威の表面である自律型をターゲットにしています。 人間の承認なしに API を呼び出し、メモリを保持し、意思決定を行う AI エージェント。

オリジナル OWASP API セキュリティ トップ 10 仮定します 人間がボタンをクリックすると、1 つのリクエストがトリガーされます。 エージェント リストでは、マシンが 50 件のリクエストを発行すると想定しています。 チェーンでは、それぞれが前の応答によって通知され、ループには人間が関与していません。 同じ API でも異なる 攻撃者のプロフィール。

このガイドでは、API 開発者が API レイヤーで修正できる 5 つの OWASP エージェント リスクについて説明します。 今週出荷できる作業コード。

エージェント アクション層: API が攻撃対象となる理由

API は、セキュリティ研究者が現在「エージェント アクション層」と呼ぶものに進化しました。 あらゆるツール AI エージェントは、在庫の注文、データベースのクエリ、通知の送信のいずれかを使用して、 API呼び出し。 エージェントは UI と対話しません。 OpenAPI 仕様を読み取り、エンドポイントを検出し、 それらを順番に呼び出します。

48.9% の組織はマシン間のトラフィックを把握していません。 つまり、すべての API の半分を意味します インフラストラクチャは人間のユーザーと自律エージェントを区別できません。 伝えられない場合は、 違いは、異なるルールを強制することはできません。

OWASP Agentic Top 10 では、過剰な代理店、即時導入、サプライ チェーンの脆弱性、 メモリポイズニング、ツールの誤用と権限昇格、カスケード障害、安全でない出力処理、 不十分なログ、データ漏洩、および不適切なサンドボックス。 このガイドでは 5 つのリスクに焦点を当てます API レイヤーで修正します。

1. 過剰な代理店: エージェントが、本来すべきではないエンドポイントに電話をかける

カスタマー サポート エージェントは注文ステータスを読み取る必要があります。 全体にアクセスできる API キーを与えます。 API。 エージェントは、注文のキャンセル、返金、アカウントの削除もできることを発見しました。 過剰 エージェンシーとは、エージェントがそのタスクを超えた権限を持っていることを意味します。

これは、OWASP API5 (機能レベルの認証の機能不全) と同等のエージェントですが、攻撃 ベクトルが違います。 人間の攻撃者は、ソース コードまたは URL 推測を通じて管理エンドポイントを発見します。 エージェントは、OpenAPI 仕様またはツール マニフェストを通じてそれらを検出します。 エージェントは推測する必要はありません。 あなたは完全なメニューを渡しました。

修正: スコープ付き API キーとエンドポイント許可リスト

エージェントごとに 1 つの API キーを作成します。 各キーは、許可されたエンドポイントの明示的なリストにマップされます。 どれも拒否する そのリスト外のリクエスト。

// Scoped API key configuration per agent
const agentPermissions = {
  "agent-order-bot": {
    allowedEndpoints: [
      "GET /api/orders/:id",
      "GET /api/orders/:id/status"
    ],
    rateLimit: { requests: 20, windowSeconds: 60 },
    maxChainDepth: 3
  },
  "agent-support-bot": {
    allowedEndpoints: [
      "GET /api/orders/:id",
      "POST /api/tickets",
      "GET /api/tickets/:id"
    ],
    rateLimit: { requests: 10, windowSeconds: 60 },
    maxChainDepth: 5
  }
};

// Middleware: check agent scope before processing
function enforceAgentScope(req, res, next) {
  const agentId = req.headers["x-agent-id"];
  const permissions = agentPermissions[agentId];

  if (!permissions) {
    return res.status(403).json({ error: "Unknown agent" });
  }

  const route = \`\${req.method} \${req.route.path}\

処理前にエージェントの JWT が正しいスコープを保持していることを確認するには、トークン クレームを検査します。 の /v1/jwt/decode エンドポイントは署名キーを必要とせずに JWT をデコードするため、次のことが可能です。 開発中および CI パイプライン内のトークンの内容を監査します。

curl -s -X POST https://api.botoi.com/v1/jwt/decode \\
  -H "Content-Type: application/json" \\
  -H "X-API-Key: YOUR_API_KEY" \\
  -d '{
    "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZ2VudC1vcmRlci1ib3QiLCJzY29wZSI6Im9yZGVycy5yZWFkIiwiaWF0IjoxNzQ5NTY0ODAwLCJleHAiOjE3NDk1NjgwMDB9.signature"
  }'

応答:

{
  "success": true,
  "data": {
    "header": {
      "alg": "RS256",
      "typ": "JWT"
    },
    "payload": {
      "sub": "agent-order-bot",
      "scope": "orders.read",
      "iat": 1749564800,
      "exp": 1749568000
    }
  }
}

scope 主張は言う orders.read。 このエージェントが電話をかけてきた場合 POST /api/orders/:id/cancel、ミドルウェアは、リクエストが到達する前にリクエストを拒否する必要があります。 あなたのハンドラー。

2. ツールの誤用と権限昇格: API 呼び出しを連鎖させるエージェント

ツールの悪用による初期報告では 520 件のインシデントが記録されており、最も一般的なエージェントの脅威となっています。 の パターン: エージェントがエンドポイント A を呼び出し、応答からデータを抽出し、そのデータを使用して呼び出します。 開発者が予想していなかった方法でエンドポイント B を実現しました。

例: Stripe 統合エージェントは以下にアクセスできます。 GET /api/customers/:id そして POST /api/refunds。 エージェントは顧客の支払い履歴を読み取り、 最高額のトランザクションを処理し、それ自体に払い戻しを発行します。 個々の呼び出しごとに認証が渡されます。 チェーンはエクスプロイトです。

修正: エージェントごとのレート制限とチェーンの深さの追跡

標準のレート制限では、IP ごとまたは API キーごとにリクエストをカウントします。 エージェントのレート制限により、次の 2 つの側面が追加されます。

  • ツールごとの制限: 単一のエージェントがウィンドウ内で特定のエンドポイントを呼び出すことができる回数を制限する
  • チェーンの深さの制限: エージェントが 1 つのセッションで実行する連続 API 呼び出しの数を追跡し、定義されたしきい値で呼び出しを終了します。
レート制限の種類 何が引っかかるのか 誰がそれを必要としているのか
IPごと DDoS、クレデンシャルスタッフィング すべてのAPI
API キーごと 虐待的な個人消費者 すべてのAPI
エージェントごと、ツールごと ループ内で 1 つのエンドポイントを呼び出すエージェント エージェントが使用する API
チェーンの深さ 複数段階の権限昇格 エージェントが使用する API

エージェントに送信を要求する X-Agent-Session ヘッダ。 セッションごとの通話数を追跡します。 とき カウントがしきい値を超えると、明確なエラー メッセージを含む 429 が返されます。

3. 不十分なロギング: エージェント API 呼び出しが可視化されない

組織の 48.9% はマシン間のトラフィックを認識していません。 エージェントが API を悪用すると、 答える必要があります: どのエージェントですか? どのエンドポイントですか? どのような順序で? どのくらいの時間帯でしょうか? 標準アクセスログ IP アドレスとタイムスタンプを表示します。 エージェントの ID や通話シーケンスは表示されません。

OWASP エージェント リストでは、エージェント攻撃が次のように見えるため、ロギングが不十分であることを最大のリスクとしてフラグ付けします。 許可されたトラフィック。 個々のリクエストはすべて認証に合格します。 エクスプロイトはさまざまなパターンに存在します。 複数のリクエスト。

修正: アトリビューションヘッダーとログ呼び出しチェーンが必要

エージェント コンシューマに必要な 3 つのヘッダーを追加します。

  • X-Agent-ID: エージェントの一意の識別子 (API キーに関連付けられています)
  • X-Agent-Session: 現在のタスクまたは会話の識別子
  • User-Agent: エージェントのフレームワークとバージョン (例: LangChain/0.3.1)
// Middleware: log every agent request with attribution
function agentAuditLog(req, res, next) {
  const logEntry = {
    timestamp: new Date().toISOString(),
    agentId: req.headers["x-agent-id"] || "unknown",
    apiKey: req.headers["x-api-key"]?.slice(-8) || "none",
    method: req.method,
    path: req.path,
    sessionId: req.headers["x-agent-session"] || "none",
    ip: req.ip,
    userAgent: req.headers["user-agent"]
  };

  // Structured JSON log for your SIEM
  console.log(JSON.stringify(logEntry));

  // Track chain depth per session
  const session = req.headers["x-agent-session"];
  if (session) {
    const depth = chainTracker.increment(session);
    if (depth > MAX_CHAIN_DEPTH) {
      return res.status(429).json({
        error: "Agent chain depth exceeded",
        maxDepth: MAX_CHAIN_DEPTH,
        currentDepth: depth
      });
    }
  }

  next();
}

このミドルウェアは、すべてのリクエストを構造化された JSON としてログに記録し、SIEM またはログ アグリゲーターにフィードします。 また、セッションごとの連続呼び出しを追跡することで、チェーンの深さを強化します。 事件を捜査すると、 フィルタリングすることで完全なチェーンを再構築できます。 sessionId

4. 安全でない出力処理: エージェントが検証なしで API 応答を信頼する

エージェントは API を呼び出し、JSON 応答を受信し、それをチェーンの次のステップに渡します。 もし 応答に予期しないフィールド、間違ったタイプ、または挿入されたコンテンツが含まれている場合、エージェントが問題を伝播します。 下流側。 これは、OWASP API10 (API の安全でない使用) と同等のエージェントであり、次のように増幅されます。 それは、エージェントが人間によるレビューなしで自動的に応答を処理するという事実です。

例: 競合他社がサードパーティの価格設定 API を侵害します。 エージェントが製品を取得します 価格、操作された応答を受け取る price フィールドを 0.01 に設定し、注文を出します その価格で。 その反応を見た人間は誰もいません。

修正: JSON スキーマに対してすべての応答を検証する

まず、正常であることがわかっている応答からスキーマを生成します。 の /v1/schema/json-to-jsonschema エンドポイントは、任意のサンプル JSON から JSON スキーマを生成します。

curl -s -X POST https://api.botoi.com/v1/schema/json-to-jsonschema \\
  -H "Content-Type: application/json" \\
  -H "X-API-Key: YOUR_API_KEY" \\
  -d '{
    "json": {
      "orderId": "ord_12345",
      "status": "shipped",
      "total": 49.99,
      "items": [
        { "sku": "WIDGET-A", "quantity": 2 }
      ]
    }
  }'

応答:

{
  "success": true,
  "data": {
    "schema": {
      "type": "object",
      "properties": {
        "orderId": { "type": "string" },
        "status": { "type": "string" },
        "total": { "type": "number" },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "sku": { "type": "string" },
              "quantity": { "type": "integer" }
            }
          }
        }
      }
    }
  }
}

次に、エージェントが受け取るすべての応答をそのスキーマに対して検証します。 の /v1/schema/validate エンドポイントは、JSON スキーマに対して JSON オブジェクトをチェックし、特定のエラーを返します。

curl -s -X POST https://api.botoi.com/v1/schema/validate \\
  -H "Content-Type: application/json" \\
  -H "X-API-Key: YOUR_API_KEY" \\
  -d '{
    "schema": {
      "type": "object",
      "required": ["orderId", "status", "total"],
      "properties": {
        "orderId": { "type": "string" },
        "status": { "type": "string", "enum": ["pending", "shipped", "delivered"] },
        "total": { "type": "number", "minimum": 0 }
      },
      "additionalProperties": false
    },
    "data": {
      "orderId": "ord_12345",
      "status": "shipped",
      "total": 49.99,
      "internalNote": "rush order"
    }
  }'

応答:

{
  "success": true,
  "data": {
    "valid": false,
    "errors": [
      {
        "path": "",
        "message": "must NOT have additional properties: internalNote"
      }
    ]
  }
}

検証がキャッチされました internalNote、応答に属さないフィールドです。 APIの場合 が予期しないフィールドを返し始めると、エージェントは汚染されたデータを下流に渡す代わりに処理を停止します。

Botoi Node.js SDK を使用した完全なパターンは次のとおりです。

import Botoi from "botoi";

const botoi = new Botoi({ apiKey: process.env.BOTOI_API_KEY });

// Step 1: generate a schema from a known-good response
const schemaResult = await botoi.schema.jsonToJsonschema({
  json: knownGoodResponse
});
const responseSchema = schemaResult.data.schema;

// Step 2: validate every agent-received response against that schema
async function validateAgentResponse(response) {
  const validation = await botoi.schema.validate({
    schema: responseSchema,
    data: response
  });

  if (!validation.data.valid) {
    console.error("Response failed validation:", validation.data.errors);
    throw new Error("Untrusted response rejected by schema validation");
  }

  return response;
}

5. サプライチェーンの脆弱性: 侵害されたツール定義

AI エージェントは、MCP サーバー、OpenAPI 仕様、およびツール マニフェストを通じてツールを検出します。 攻撃者が改ざんした場合 ツール定義の場合、エージェントは別のエンドポイントを呼び出したり、データを別のサーバーに送信したり、実行したりします。 開発者が意図したものとは異なるパラメータが設定されています。

例: 30 個のツールを定義するオープンソース MCP サーバーを使用します。 攻撃者が提出する 1 つのツールの API URL を変更するプル リクエスト api.stripe.comapi.str1pe.com。 この変更は単一文字であるため、コード レビューに合格します。 あなたのエージェント 攻撃者のサーバーに支払いデータを送信します。

修正: ハッシュ ツール定義と実行時の検証

デプロイ時にすべてのツール定義をハッシュします。 エージェントが実行時にツールを登録する前に、ツールを再度ハッシュします そして比較してください。 の /v1/hash エンドポイントは、任意の文字列の SHA-256 ハッシュを生成します。

curl -s -X POST https://api.botoi.com/v1/hash \\
  -H "Content-Type: application/json" \\
  -H "X-API-Key: YOUR_API_KEY" \\
  -d '{
    "text": "{\\"name\\":\\"get_order_status\\",\\"description\\":\\"Retrieve current order status by order ID\\",\\"parameters\\":{\\"orderId\\":\\"string\\"}}",
    "algorithm": "sha256"
  }'

応答:

{
  "success": true,
  "data": {
    "hash": "a3f2b8c1d4e5f67890abcdef1234567890abcdef1234567890abcdef12345678",
    "algorithm": "sha256"
  }
}

Botoi SDK を使用した完全な整合性チェック ワークフローは次のとおりです。

import Botoi from "botoi";
import fs from "fs";

const botoi = new Botoi({ apiKey: process.env.BOTOI_API_KEY });

// Hash every tool definition at deploy time
const toolDefs = JSON.parse(fs.readFileSync("./mcp-tools.json", "utf-8"));
const hashes = {};

for (const tool of toolDefs) {
  const result = await botoi.hash.sha256({
    text: JSON.stringify(tool)
  });
  hashes[tool.name] = result.data.hash;
}

fs.writeFileSync("./tool-hashes.json", JSON.stringify(hashes, null, 2));

// At runtime, verify before registering any tool
async function verifyToolIntegrity(tool) {
  const result = await botoi.hash.sha256({
    text: JSON.stringify(tool)
  });
  const expected = hashes[tool.name];

  if (result.data.hash !== expected) {
    throw new Error(
      \`Tool "\${tool.name}" failed integrity check. \\n\` +
      \`Expected: \${expected}\\n\` +
      \`Got: \${result.data.hash}\`
    );
  }
}

CI パイプラインでハッシュ生成ステップを実行します。 ハッシュ ファイルをデプロイメントと一緒に保存します アーティファクト。 実行時には、すべてのツールが登録前に検証されます。 いずれかの単一の変更された文字 ツール定義によりハード障害が発生します。

OWASP エージェント トップ 10 と API セキュリティ トップ 10: 比較

2 つのリストは相互に補完します。 5 つのエージェントのリスクが、最も近い API セキュリティにどのように対応しているかは次のとおりです。 対応するものと変更点:

薬剤のリスク 最も近い API セキュリティ リスク エージェントにとっての変化
過剰な主体性 API5 機能認証が壊れている エージェントは仕様からすべてのエンドポイントを検出します。 エージェントごとのスコープキー
ツールの誤用 API4 リソースの消費量 エージェントは通話を連鎖させてエスカレーションします。 チェーンの深さ制限を追加する
不十分なロギング 直接同等のものはありません エージェントの通話は許可されたトラフィックのように見えます。 属性ヘッダーを追加する
安全でない出力 API10 安全でない消費 エージェントは人間によるレビューを行わずに応答を処理します。 スキーマ検証を追加
サプライチェーン 直接同等のものはありません 侵害されたツールは、エージェント トラフィックのリダイレクトを定義します。 整合性ハッシュを追加する

出荷チェックリスト: エージェント API セキュリティに関する 5 つの修正

それぞれの修正は独立しています。 1 つを選択して出荷し、次のステップに進みます。

修理 何をするか Botoi エンドポイント
スコープ付き API キー エージェントごとに 1 つのキー。 キーごとの許可リストのエンドポイント /v1/jwt/decode
エージェントごとのレート制限 ツールごとおよびセッションごとのチェーンの深さを追跡する
属性ヘッダー X-Agent-ID、X-Agent-Session が必要です。 ログ構造化されたJSON
応答の検証 良好な応答からスキーマを生成します。 すべてのエージェントの応答を検証する /v1/schema/validate/v1/schema/json-to-jsonschema
ツールの完全性 ハッシュツールはデプロイ時に定義されます。 実行時に検証する /v1/hash

次に何が起こるか

エージェントティック アプリケーションの OWASP トップ 10 の完全版は、次の場所にあります。 owasp.org。 Cisco、Microsoft、Google はいずれも、RSAC 2026 でエージェント セキュリティ イニシアチブを発表したため、期待が高まります。 ツールと標準は、今年の残りの期間を通じて迅速に進められます。

リストに残る 5 つのリスク (プロンプト インジェクション、メモリ ポイズニング、カスケード障害、データ) 漏洩および不適切なサンドボックス化など)には、API レイヤーではなく、エージェント フレームワーク レイヤーでの修正が必要です。 もし エージェント フレームワークを実行する場合は、OWASP ドキュメント全体を読んでください。 API を実行する場合、上記の 5 つの修正は次のとおりです。 あなたの出発点。

スコープ付き API キーから始めます。 この 1 つの変更により、過剰な機関やツールの悪用の大部分が阻止されます。 シナリオ。 次に、アトリビューション ヘッダーを追加して、エージェントが何をしているかを確認できるようにします。 残りは以下から続きます 視認性。

FAQ

OWASP エージェント アプリケーション トップ 10 は OWASP API セキュリティ トップ 10 とどう違うのですか?
API セキュリティ トップ 10 (2023) は、権限の破損、認証の欠陥、過剰なデータ漏洩など、人間の消費者によるリスクに対処しています。 Agentic Applications Top 10 (2026) は、API 呼び出しを連鎖させ、セッション間でメモリを保持し、人間の監視なしに意思決定を行う自律型 AI エージェントからのリスクに対処します。 どちらのリストも API に適用されますが、エージェント リストは、当初は予期していなかったマシン間のパターンを対象としています。
エージェントアプリケーションにおける過剰なエージェントとは何ですか?
過剰なエージェンシーは、AI エージェントがタスクに必要な範囲を超えた API エンドポイントまたはアクションにアクセスできる場合に発生します。 たとえば、請求、返金、アカウント削除のエンドポイントにアクセスできるカスタマー サポート エージェントは、これらの通話を連鎖させて、質問への回答をはるかに超えたエスカレーションを行うことができます。 この修正は、各エージェントを必要な正確なエンドポイントに制限するスコープ指定された API キーです。
エージェントセキュリティのために API を再構築する必要がありますか?
いいえ。再構築する必要はありません。 このガイドで説明されている 5 つの修正、スコープ指定された API キー、ツールごとのレート制限、リクエスト アトリビューション ヘッダー、応答スキーマの検証、ツール定義の整合性チェックは、既存の API に追加されたものです。 それぞれを個別に発送することも可能です。
ツールの悪用がエージェント アプリケーションの最も一般的な脅威であるのはなぜですか?
エージェントが開発者が意図しない方法で API 呼び出しを連鎖させるため、ツールの誤用と権限昇格により、初期の報告では 520 件のインシデントが記録されました。 単一のエージェントが読み取りエンドポイントを呼び出し、応答を解析した後、最初の呼び出しのデータを使用して書き込みエンドポイントを呼び出して権限を昇格させることができます。 ほとんどの API には、単一エージェント セッションからのマルチステップ チェーンを検出またはブロックするメカニズムがありません。
API リクエストを特定の AI エージェントに割り当てるにはどうすればよいですか?
必要な X-Agent-ID ヘッダーを API に追加します。 各エージェントは、スコープ指定された API キーに関連付けられた一意の識別子を取得します。 すべてのリクエストで API キーとエージェント ID の両方を記録します。 これにより、どのエージェントがどのエンドポイントをいつ、どのような順序で呼び出したかに関する完全な監査証跡が得られます。

botoiで開発を始めよう

150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。