Shikata Ga Nai

Private? There is no such things.

How I messed up my own profile dataを訳してみた

Hello there, ('ω')ノ

 

自分のプロファイルデータを台無しにした方法を。

 

脆弱性:

 承認の欠陥

 

記事:

 https://medium.com/@himmat1005/how-i-messed-up-my-own-profile-data-94a4b09cb54c

 

今回は、Webアプリケーションの1つをテストしているときに。

経験したことの1つを共有することに。

 

1.ウェブサイトにログイン⇨Go to profile⇨Change ‘username’ field (test_user)⇨

 submit⇨BurpSuitでリクエストをインターセプトして転送すると。

 次のようにリクエストとレスポンスが表示されて。

 

リクエスト :

PATCH /redacted/updateProfile

……

{‘user’:’test_user’}

 

レスポンス :

HTTP/1.1 200 OK

{‘user’:’test_user’,’number’:’9999999999',’email’:’test@gmail.com’,’first’:’test’,’last’:’user’….}

 

2.ここで、Webサイトの機能に従ってユーザがPROFILEセクションから。

 電話番号を変更する場合は、最初にOTPを送信してから送信する必要があって。

 

3.なので、次のリクエストを送信して、/updateProfileAPIを使用して。

 電話番号を直接更新することを考えて。

 

リクエスト :

PATCH /redacted/updateProfile

……

{‘user’:’test_user’,’number’:’1234567890'}

 

レスポンス :

HTTP/1.1 401 Unauthorized

…..

{‘error’,’Updating Phone-number requires an OTP paramater’}

 

4.したがって、リクエストでもOTPを送信する必要があって。

5.PUT http-methodはレコードの更新にも使用されるため。

 リクエストでPATCH http-method をPUTに変更し。

 Burp Suiteからそのリクエストを転送すると。

 

リクエスト :

PUT /redacted/updateProfile

……

{‘user’:’test_user’,’number’:’1234567890'}

 

レスポンス :

HTTP/1.1 200 OK

{‘username’:’test_user’,’number’:’1234567890',’email’:’test@gmail.com’,’first’:’test’,’last’:’user’….}

 

6.この反応を見て、うまくいきそうにおもったのですが。

 

7.ログアウトして自分のユーザ名で再度ログインするとページ全体が壊れていて。

 自分の名前やその他のプロファイル情報も見ることができず。

 すべてのフィールドデータのいたるところにUNDEFINEDが表示されていて。

 

うまくいかなかった原因として、PATCH http-methodを使用してデータを送信すると。

サーバはその特定のデータ、またはパラメータのみを更新することに気付いて。

PATCHリクエストに以下の本文がある場合、「username」のみが更新されて。

 

リクエスト本文:

{‘username’:’test_user’}

 

ただし、PUT http-methodを使用してデータを送信する場合、サーバは。

リクエスト本文に記載されている特定のパラメータではなく。

ほとんどの場合、レコード全体を更新するためにそれを使用して。

(注:API構成にも依存しますが、ほとんどの場合発生して)。

 

つまり、以下のリクエスト本文を送信すると。

リクエストとともに送信されなかったすべてのパラメータ。

(たとえば、「first」、「last」、「email」など)にNULLを入力することで。

ユーザーのレコード全体が更新され、プロファイルにUNDEFINEDが表示されて。

 

リクエスト本文:

{‘username’:’test_user’,’number’:’1234567890’}

 

PUT⇨PATCHもしくは、PATCH⇨PUTへの変更は。

いくつかの制限を回避するのに役立つ場合があって。

PUTを使用すると、レコード全体が更新されるため。

特定のユーザに関連するすべてのデータが混乱する可能性があることに注意して。

 

Best regards, (^^ゞ