Starletteは軽量なASGIフレームワークおよびツールキットです。バージョン1.0.1以下では、リクエストをディスパッチする際に、HTTPEndpointはHTTPメソッドを小文字化し、getattrで属性を参照してハンドラーを選択しますが、この参照は既知のHTTP動詞のセットに制限されていません。HTTPEndpointのサブクラスがmethods=引数を明示的に指定せずにRoute(...)を通じて登録されると、そのルートはメソッドを制限せず、すべてのメソッドがエンドポイントに到達します。小文字化した名前がエンドポイントサブクラスの属性と一致する非標準HTTPメソッドがエンドポイントに到達すると、その属性はリクエストハンドラーとして呼び出されます。攻撃者はこれを利用して、本来HTTPハンドラーとして意図されていなかった内部ヘルパーなどのメソッドに認可チェックなしで到達できます。StarletteベースのFastAPIのようなアプリケーションも影響を受けます。methods=を明示的に設定せずRoute(...)経由でHTTPEndpointサブクラスを登録し、そのサブクラスが非標準HTTP動詞の名前でリクエストを1つ受け取りレスポンスを返す追加メソッドを含む場合に問題が発生します。この問題はバージョン1.1.0で修正されました。
|