Shikata Ga Nai

Private? There is no such things.

Price Manipulation Bypass Using Integer Overflow Methodを訳してみた

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, (^^ゞ