セキュリティの配慮

Pygments では実行時間を保証しません。Pygments を使用して任意のユーザー入力を処理する際、実行時間は考慮する必要があります。たとえば、Pygments をハイライトに使用している Web サービスがあった場合、Pygments のプロセスが「永遠に」実行されるか大量のメモリを使用するような入力が発生する可能性があります。その後、プロセスがすぐに終了しない場合、サーバーに対してリモート DoS 攻撃を実行するために使用される可能性があります。

残念なことに、Pygments 自体をこうした問題に対して強化することは事実上不可能です。正規表現の中には「壊滅的なバックスラッシュ」が発生するものもありますが、不正なマッチャーなどの他のバグも同様の問題を起こす可能性があり、自動化された方法ではそれらを見つけることはできません(停止問題を解決しない限り)。Pygments には広範なユニットテスト、自動化されたランダムテストがあり、OSS-Fuzz でもテストされていますが、この分野のすべてのバグを排除することは決してできません。

当社からの推奨事項は次のとおりです。

  • Pygments プロセスが妥当な時間のタイムアウト後に終了されるようにします。一般的な場合、Pygments が適切なサイズの入力に要する時間はせいぜい数秒です。

  • リソースのオーバーサブスクリプションを避けるために、並列 Pygments プロセスの数を制限します。

Pygments の作成者は、長い処理時間に起因するバグを最優先で処理します。これはパッチ リリースで修正される問題です。非常に長い実行時間の疑われるバグを報告する場合は、それを再現するための入力を添付してください。