Hello there, ('ω')ノ
整数オーバーフロー法を使用した価格操作バイパスを。
脆弱性:
決済改ざん
メモリ破損バグ
記事:
https://marxchryz.medium.com/price-manipulation-bypass-using-integer-overflow-method-36ff23ebe91d
Web サイトは非公開なので、redacted.com と呼ぶことに。
Redacted.com は、ユーザが redacted.com から。
アイテムを購入できるようにする e コマース Web サイトで。
整数オーバーフロー:
偵察中に、redacted.com がプログラミング言語として PHP を使用していると。
wappalyzer が言っていることに気付き。
PHP には、String、Integer、Float などのいくつかのデータ型があり。
PHP の符号付き整数には、格納できる数値の大きさに制限があり。
この制限は、システム自体 (32 ビットまたは 64 ビット) によって異なって。
64 ビット システムでは、signed int は -2⁶³ から 2⁶³-1 までしか格納できず。
では、9223372036854775808 (2⁶³) のような非常に大きな数を。
ここに格納するとどうなるか。
2⁶³ は PHP の最大制限よりも高いため。
PHP は数値を可能な限り低い数値である -2⁶³ に強制的に戻し。
数字が 2⁶³-1 (23:59) を過ぎると、-2⁶³ (00:00) に戻る時計と考えて。
整数オーバーフローについてのリファレンスで。
CWE-190 に関する MITRE からの投稿もあり。
https://compsecurityconcepts.wordpress.com/2014/12/31/integer-overflow/
https://cwe.mitre.org/data/definitions/190.html
redacted.com では、カートにネガティブなアイテムを追加することを考え。
商品Aを-10個注文しましたが、もちろん、整数オーバーフローを試す前に。
負の数を直接入力して。
2つの API (カートへのアイテムの追加と編集) があり。
最初の API は数量を強制的に正にし (-10 を入力すると数量は 10 になり)。
2番目の API で負の数を入力するとエラーが発生し。
負の数は許可されていないというメッセージで。
これらの制限により、整数オーバーフローを試みることを考えて。
搾取:
アイテム A がそれぞれ 10 ドルで、アイテム B がそれぞれ 80 ドルだとして。
1.商品Aの9223372036854775808を注文して。
2.送信すると、数量は -9223372036854775808 になり。
整数オーバーフロー バグの存在が証明され。
3.アイテムAの9223372036854775800を再度注文したので。
アイテムAのアイテムは合計で-8個になり。
4.今、カートの合計は-80$で。
5.アイテムBを1つ注文し。(80$)
6.今、カートの合計は 0.00$ で。
7.最初は、これは単なる視覚的なバグだと思っていて。
おそらく、サーバで負の数をチェックする別のチェックが行われていて。
これが視覚的なバグではないことを確認するために。
カートをチェックアウトし、PayPal を使用して支払い。
驚いたことにバグは機能し、アイテムを無料で支払って。
Best regards, (^^ゞ