Asayomu Tech
注目★★★★★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)`への変更でクラッシュ回避は可能だが根本対策ではない。

詳細を読む → 元記事へ※ 本文は元記事をご確認ください (asayomu は要約のみ提供)

関連する記事

※ 外部記事の権利は原著作者に帰属します。著作権削除要請は copyright@asayomu.jp までご連絡ください(受領確認 24h・実処理 72h 以内)。