Datadog dd-trace-py: URLクエリ文字列の難読化におけるReDoSの脆弱性
### 概要
URLクエリ文字列を難読化するために使用される正規表現は、特定の攻撃者によって制御された入力データに対して処理を行う際に、過剰なCPUリソースを消費する可能性があります。これにより、リクエスト処理が停止し、影響を受けるHTTPトレース機能を使用しているアプリケーションでサービス拒否(DoS)が発生する可能性があります。
### 詳細
デフォルトのクエリ文字列難読化パターンは、過剰なバックトラックを引き起こす可能性があります。このパターンは、HTTP URLのメタデータを記録する際に同期的に適用されるため、クエリ文字列の処理がアプリケーションのリソースを長期間占有する可能性があります。
回避策として、DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXPとDD_TRACE_OBFUSCATION_QUERY_STRING_PATTERNの両方の環境変数を、以下のPython互換の正規表現に設定し、アプリケーションを再起動してください。両方の変数を設定することで、1.19.0以前のリリースを含む、すべての影響を受けるddtraceのバージョンが対象となります。
```
export DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP='(?i)(?:(?:"|%22)?)(?:(?:old[-_]?|new[-_]?)?p(?:ass)?w(?:or)?d(?:1|2)?|pass(?:[-_]?phrase)?|secret|(?:api[-_]?|private[-_]?|public[-_]?|access[-_]?|secret[-_]?|app(?:lication)?[-_]?)key(?:[-_]?id)?|token|consumer[-_]?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?)(?:(?:\s|%20)*(?:=|%3D)[^&]+|(?:"|%22)(?:\s|%20)*(?::|%3A)(?:\s|%20)*(?:"|%22)(?:%2[^2]|%[^2]|[^"%])+(?:"|%22))|(?:bearer(?:\s|%20)+[a-z0-9._\-]+|token(?::|%3A)[a-z0-9]{13}|gh[opsu]_[0-9a-zA-Z]{36}|(?:(?<![\w-])|(?<=%[0-9a-f]{2}))ey[I-L][\w-]+(?:=|%3D)*\.ey[I-L][\w-]+(?:=|%3D)*(?:\.(?:[\w.+/=-]|%3D|%2F|%2B)+)?|-{5}BEGIN(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY-{5}[^\-]+-{5}END(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY(?:-{5})?(?:\n|%0A)?|(?:ssh-(?:rsa|dss)|ecdsa-[a-z0-9]+-[a-z0-9]+)(?:\s|%20|%09)+(?:[a-z0-9/.+]|%2F|%5C|%2B){100,}(?:=|%3D)*(?:(?:\s|%20|%09)+[a-z0-9._-]+)?)'
export DD_TRACE_OBFUSCATION_QUERY_STRING_PATTERN="$DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP"
```
### 実証
このセキュリティアドバイザリでは、詳細なトリガーとなる入力と再現手順は省略されています。修正版には、影響を受ける動作に対する回帰テストが含まれています。
### 影響
脆弱な難読化パターンにより、攻撃者が制御するURLクエリ文字列を処理するアプリケーションに、正規表現によるサービス拒否(ReDoS)が発生する可能性があります。攻撃が成功すると、CPU使用率の増加、リクエストの遅延、およびサービスの停止を引き起こす可能性があります。
影響を受けるHTTP連携では、URL内のタグにクエリ文字列が含まれている場合、デフォルトで脆弱な処理が有効になっています。
影響を受けるパッケージ:
- pip (Python) ddtrace: 影響を受けるバージョンは1.5.0以上、3.19.9未満。3.19.9で修正済み。
- pip (Python) ddtrace: 影響を受けるバージョンは4.0.0以上、4.15.6未満。4.15.6で修正済み。