dd-trace: URLクエリ文字列の難読化におけるReDOS(リトライによるサービス拒否)
### 概要
URLクエリ文字列を難読化するために使用される正規表現は、特定の攻撃者によって制御された入力データに対して処理を行う際に、過剰なCPUリソースを消費する可能性があります。これにより、リクエスト処理が停止し、影響を受けるHTTPトレース機能を使用しているアプリケーションでサービス拒否が発生する可能性があります。
### 詳細
デフォルトのクエリ文字列難読化パターンは、過剰なバックトラックを引き起こす可能性があります。このパターンは、HTTP URLのメタデータを記録する際に同期的に適用されるため、クエリ文字列の処理がアプリケーションのリソースを長期間占有する可能性があります。
回避策として、`DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP`変数を以下の修正された正規表現に設定し、アプリケーションを再起動してください。
```
DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP='(?:(?:"|%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._-]+)?)'
```
### 実証
詳細なトリガー入力と再現手順は、このセキュリティアドバイザリから省略されています。修正されたバージョンには、影響を受ける動作に対する回帰テストが含まれています。
### 影響
正規表現によるサービス拒否(ReDoS)は、脆弱な難読化パターンによって、攻撃者が制御するURLクエリ文字列を処理するアプリケーションに影響を与えます。 攻撃が成功すると、CPU使用率の増加、リクエストの遅延、およびサービスの利用不可を引き起こす可能性があります。
影響を受けるHTTP連携では、URL内のタグにクエリ文字列が含まれている場合、デフォルトで脆弱な処理が有効になっています。
影響を受けるパッケージ:
- npm (JavaScript) dd-trace: 影響を受けるバージョンは2.0.0以上、5.131.1未満。 5.131.1で修正済み。
- npm (JavaScript) dd-trace: 影響を受けるバージョンは6.0.0以上、6.20.1未満。 6.20.1で修正済み。