注目★★★★★GitHub Advisory
spomky-labs/otphp: digits=50のURIでDivisionByZeroError発生するDoS脆弱性
30秒で把握
- 1spomky-labs/otphpのdigits上限未検証でDoS可能な脆弱性が判明
- 2digits≥40でPHP整数オーバーフロー→ゼロ除算エラー・catch漏れで致命的
- 3OTP検証パスのサービス拒否につながりアプリ停止リスクあり
要約
spomky-labs/otphpライブラリにおいて、プロビジョニングURIの`digits`パラメータに上限バリデーションがなく、攻撃者が`digits=50`のような大きな値を送ると`DivisionByZeroError`が発生する。PHP 8.3環境でdigits≥40から整数オーバーフローが起き、OTP生成の`%`演算子がゼロ除算となり`at()`・`now()`・`verify()`がすべて例外をスローする。`DivisionByZeroError`は`Error`を継承し`Exception`ではないため、`catch (\Exception)`での保護をすり抜けて未処理の致命的エラーとなり、OTP検証パスのサービス拒否(DoS)を引き起こす。
あなたへの影響
OTP検証を本番実装しているチームは`OTPHP\Factory::loadFromProvisioningUri()`を使用している箇所を確認し、`digits`パラメータに上限(例:最大8)を手動でバリデーションするか、ライブラリのパッチ適用を待つ対応を速やかに検討されたい。
推奨:`catch (\Throwable)`への変更でクラッシュ回避は可能だが根本対策ではない。