Атака срещу системи фронтенд-бекенд, позволяваща намеса в странични заявки

Разкрити детайли на нова атака срещу сайтове, използващи модел фронтенд-бекенд, например, работещи през мрежи за доставка на съдържание, балансировачи или прокси. Атаката позволява чрез изпращане на определени заявки да се намесят в съдържанието на други заявки, обработвани в същия поток между фронтенда и бекенда. Предложеният метод е успешно приложен за организиране на атака, позволяваща прихващане на параметри за удостоверяване на потребителите на услугата PayPal, която изплати на изследователите около 40 хиляди долара в рамките на програмата за уведомяване за наличие на неизправени уязвимости. Атаката е приложима и за сайтове, използващи мрежата за доставка на съдържание Akamai.

Същността на проблема е, че фронтенд и бекенд често осигуряват различно ниво на поддръжка на протокола HTTP, но в същото време инкапсулират заявки от различни потребители в общ канал. За връзка между приемащия заявки фронтенд и обработващия заявки бекенд се установява дълготрайно TCP съединение, през което се предават заявките на потребителите, предавани по веригата една след друга с разделение чрез средствата на протокола HTTP. За разделяне на заявките могат да се използват заглавията "Content-Length" (определя общия размер на данните в заявката) и "Transfer-Encoding: chunked" (позволява предаване на данни на части, указвайки блокове с различен размер във формата "{размер}\r\n{блок}\r\n{размер}\r\n{блок}\r\n0").

Проблемът възниква, ако фронтендът поддържа само "Content-Length", но игнорира "Transfer-Encoding: chunked" (например, така постъпва CDN Akamai) или обратно. В случай на поддръжка на "Transfer-Encoding: chunked" от двете страни, за атаката могат да се използват особености при реализацията на парсерите на HTTP заглавията (например, когато фронтендът игнорира редове от вида "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked", "Transfer-Encoding:[tab]chunked", "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" или "Transfer-Encoding : chunked", а бекендът успешно ги обработва).

В този случай атакуващият може да изпрати заявка, в която едновременно са посочени заглавията «Content-Length» и «Transfer-Encoding: chunked», но размерът в «Content-Length» не съответства на размера на chunked-веригата, която е по-малка от фактическата стойност. Ако фронтендът обработи и пренасочи заявката в съответствие с «Content-Length», а бекендът очаква завършване на блока въз основа на «Transfer-Encoding: chunked», тогава краят на данните на основание «Transfer-Encoding: chunked» ще бъде определен по-рано и оставящият се хвост на заявката на атакуващия ще се окаже в началото на следващата заявка, т.е. атакуващият ще получи възможността да прикрепи произволни данни към началото на чужда заявка, отправена след това.

Атака срещу системи фронтенд-бекенд, позволяваща намеса в странични заявки

За определяне на проблема в използваната комбинация фронтенд-бекенд чрез фронтенда може да се изпрати заявка от вида:

POST /about HTTP/1.1
Host: example.com
Transfer-Encoding: chunked
Content-Length: 4

1
Z
Q

Проблемът е налице, ако бекендът веднага не обработи заявката и очаква получаването на финален нулев ограничителен блок на chunked-данните. За по-подробна проверка е подготвена специален инструмент, който също тества възможните методи за скриване на заглавието «Transfer-Encoding: chunked» от фронтенда.

Провеждането на реална атака зависи от възможностите на атакувания сайт, например, при атака на уеб-приложението Trello може да се подмени началото на заявката (да се заместят данни от вида «PUT /1/members/1234… x=x&csrf=1234&username=testzzz&bio=cake») и да се изпрати съобщение, включващо оригиналната заявка на трети потребител и посочените в нея Cookie за автентикация. За атаката на saas-app.com се оказа възможно да се направи подмяна на JavaScript-код в отговора, чрез неговата подмяна в един от параметрите на заявката. За атаката на redhat.com беше използван вътрешен обработчик за пренасочване към сайта на атакуващия (беше подменен заявката от вида «POST /search?dest=../assets/idx?redir=//redhat.com@evil.net/ HTTP/1.1»).

Използването на метода за мрежи за доставка на съдържание позволява просто да се подмени исканият сайт чрез заместване на заглавката «Host:». Атаката също така може да се приложи за организиране на отравяне на съдържанието на системи за кеширане и извличане на кеширани конфиденциални данни. Върхът на приложението на метода бе организирането на атака срещу PayPal, която позволяваше прихващането на пароли, изпращани от потребителите при удостоверяване (беше извършено изменение на искането iframe за изпълнение на JavaScript в контекста на страницата paypal.com/us/gifts, за която не се прилага CSP (Политика за сигурност на съдържанието)).

Интересно е, че през 2005 г. беше предложена подобна по същността си техника за подмяна на искания, позволяваща да се подменят данни в кеширащи проксита (Tomcat, squid, mod_proxy) или да се заобикалят блокировки на междумодови стени чрез указване на няколко искания «GET» или «POST» в рамките на един HTTP сеанс.

Източник: opennet.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster