コンテンツにスキップ

Timeout (タイムアウト)

概要

API サーバーがある程度の時間内に応答しなかったため、ファザーはリクエストを断念しました。

この問題は、サービス拒否攻撃につながる可能性があります。攻撃者は、問題のあるリクエストを使用して、本来の処理と比較して過大なサーバー リソースを消費することができます。

推奨事項

特定のリクエスト ペイロードが極端に遅いレスポンスの原因にならないことを確認します。

Mayhem for API (およびファジング全般) は、ターゲットをすばやく検証できることを期待します。セキュリティの観点から、指摘を誤検出とみなす場合でも、高速なレスポンスを維持すると、カバレッジが向上します。

サンプル

次の FastAPI サンプルは、(極度に人為的な) 時間ベースのサービス拒否攻撃に対して脆弱です。

from fastapi import FastAPI
import time

app = FastAPI()

@app.get("/test/{id}")
def test(id: int):
    if id == 9:
        time.sleep(10)
    return {"id": id}

このエンドポイントは、次のように、特定の入力値 '9' では動作が大幅に異なることがわかります。

$ time curl localhost:8000/test/1
{"id":1}
real    0m0.013s
user    0m0.004s
sys 0m0.006s
$ time curl localhost:8000/test/9
{"id":9}
real    0m10.019s
user    0m0.005s
sys 0m0.008s

2 番目のリクエストは 10 秒以上かかっています。これは、このページで説明している問題の動作です。より現実的なサンプルとしては、複雑な正規表現式、高濃度のデータベース クエリーなどがあるでしょう。Mayhem for API の観点からは、これらはすべて同じです。サーバーがある程度の時間内に応答しませんでした。

そのような遅いレスポンスが問題のある動作ではないと判断した場合、"mapi run" コマンドに --ignore-rule Timeout を渡すことで、これらの問題をレポートしないようにできます。

参考資料

  • Common Weakness Enumeration: CWE-730.