Hello there, ('ω')ノ
非常に単純なトリックによる完全なアカウントの乗っ取りを。
脆弱性:
アカウントの乗っ取り
アクセス制御の破綻
記事:
https://medium.com/@xerox0x1/full-account-take-over-by-very-simple-trick-b4025a53047c
今回は、最初に Access Control のバグを探し始め。
それで、すぐにすべてのユーザの役割を再確認して。
リクエスト、レスポンスの操作、検索エンジンの隠されたエンドポイントへの。
ドーキング、ウェイバック マシン、alien vaultなど。
残念ながら、すべてのユーザ ロールは安全に処理され。
そのような場合に他に何もすることはありませんでしたが。
気が付くまで、プラットフォームで新しいユーザを作成する要求があり。
こんな感じで。
マークされた値を分解してみると。
1.「platform」: このユーザに割り当てるプラットフォーム。
「platform ID = account ID」
2.「uzrole」: そのユーザに割り当てられる役割。
悪意のあるハッカーは、ユーザにプラットフォームへのフル アクセスを。
許可するユーザ ロールを選択したと考えて。
3.「allowedplatforms」: これが最も危険なプラットフォームで。
この JSON には、必要な数のプラットフォーム ID を追加でき。
「allowedplatforms」セクションにいくつかのプラットフォームを追加し。
リクエストを転送し。
ほぼすべてのリクエストを同じ基準でチェックしたため。
うまくいかないことは間違いありませんでしたが、驚いたことにうまくいって。
200OKで、以下の返事が返ってきて。
HTTP/2 200 OK
Date: Sun, 15 Jan 2023 22:33:58 GMT
Content-Type: application/json; charset=utf-8
{
"reference": {
"name": "self",
"value": "lysa@email.com"
},
"address": {
"location": {
"type": "Point",
"geometry": []
},
"addressLines": [],
"geocodeScore": 0,
"cleanScore": 0
},
"login": {
"failedAttempts": 0,
"history": [],
"lastActivity": "2023-01-15T22:33:58.285Z",
"passwordHistory": []
},
"rating": {
"count": 0,
"total": 0
},
"position": {
"type": "Point",
"isMock": false
},
"start": {
"type": "none",
"now": 0
},
"timesheet": {
"days": [],
"breaks": []
},
"status": "VALIDATED",
"termsAccepted": false,
"allowedPlatforms": [
"62fa62057dadb00012f34e9f",
"62fa62057dadb00012f34e3a",
"62fa6204f45cbb00112075d5"
],
"gender": "UNKNOWN",
"passwordHashAlgorithm": "bcrypt",
"verifiedPassword": true,
"hubs": [],
"preferredZones": [],
"external": false,
"classic": true,
"express": false,
"scheduler": false,
"roundStartpoint": "default",
"roundEndpoint": "default",
"skills": [],
"unavailable": false,
"availabilities": [],
"collectionPoints": [],
"_id": "63c47f561f30d030e2bf92da",
"email": "lysa@email.com",
"firstName": "Lysa",
"lastName": "Aren",
"invitationCode": "NNH05LsgkgpePhdJ",
"uzrole": "572894aeb3d4620cd97a0ede",
"platform": "62fa62057dadb00012f34e9f",
"language": "en-001",
"password": "$2a$10$hIm1199JHi7vZuJBPiHQGOLuEQmRdryffrUilYPQh9nSh8xq0pXVm",
"pin": "efd926ba52b4e4431a6a173e0e731d2cddec0dfc50f30492ceadfff89af31f67",
"externalId": "1234",
"phoneNumber": "12341234",
"emailCheck": {
"valid": false
},
"phoneNumberCheck": {
"valid": false
},
"when": "2023-01-15T22:33:58.285Z",
"updated": "2023-01-15T22:33:58.292Z",
"attachments": [],
"devices": [],
"workingTimes": [],
"holidays": [],
"__v": 0,
"id": "63c47f561f30d030e2bf92da"
}
応答の「allowedplatfroms」を詳しく見ると。
• リクエストの早い段階で ID を割り当てたプラットフォームを確認し。
ページを更新すると、作成したユーザがこれらのプラットフォームに。
アカウントの完全な権限で割り当てられていることがわかり。
• すべてが正しいことを確認するために、このユーザでいくつかの。
プラットフォームにログインしましたが、彼女は完全な権限で。
ログインしていて。
そこから、管理者の削除、変更、アカウント全体の削除など、何でもできて。
脆弱性は重複していましたが、そこから何かを思いついて。
結論:
• アクセス制御は常に優先され。
• 常に最も単純なことを試して。
通常、脆弱性はあまりにも明白で、よく掘り下げる必要があるだけで。
Best regards, (^^ゞ