figletは、whitespaceBreakオプションが使用され、幅が非常に小さい場合に、無限ループを引き起こすことで、サービス拒否の脆弱性があります。
### 影響
`text()`/`textSync()`関数において、以下の条件が両方満たされた場合、サービス拒否(無限ループ)が発生する可能性があります。
- `whitespaceBreak: true`が設定されている。
- `width`が、単一のFIGlet文字の表示幅よりも小さい値に設定されている。
これらの条件下では、`breakWord()`関数が有効な区切りポイントを見つけることができず、`generateFigTextLines()`関数内の単語折り返しループが終了しません。これにより、CPUコアが固定され、メモリ使用量が上限なしに増加し、Node.jsのイベントループがブロックされます。
### 深刻度
低い、または中程度。脆弱性を引き起こすには、デフォルト以外の設定(`whitespaceBreak: true`)と、攻撃者が制御できる`width`の値が`text()`/`textSync()`関数に渡される必要があります。通常、このライブラリは固定されたオプションで使用されるため、この状態になることは稀です。ただし、信頼できない`width`の値を`whitespaceBreak`オプションと共にリクエストパスに渡すアプリケーションでは、この問題が発生する可能性があります。
### 修正
**figlet 1.11.3**で修正されました。`breakWord()`関数は常に前進するように改善され(幅が広すぎる文字を別の行に出力します)、FIGletヘッダーの解析において、無効な値(例えば、ゼロまたは負の高さ)が拒否されるようになりました。
### 対策
`width`オプションを信頼できない入力から保護するか、`whitespaceBreak`オプションを無効(デフォルト)のままにするか、またはバージョン1.11.3以上にアップグレードしてください。
影響を受けるパッケージ:
- npm (JavaScript) figlet: 1.11.3未満のバージョンに影響があり、1.11.3で修正されています。