Biblioteka facil.io w wersjach 0.6.0–0.7.6 zawiera podatność typu denial-of-service w parserze ciała multipart, umożliwiającą nieuwierzytelnionemu zdalnemu atakującemu trwałe zamrożenie procesów roboczych serwera. Wysłanie jednego spreparowanego żądania HTTP może całkowicie wyłączyć serwer do czasu ręcznego restartu.
▸ Pokaż oryginał (EN)
facil.io 0.6.0 through 0.7.6 contains a denial-of-service vulnerability in the multipart body parser that allows an unauthenticated remote attacker to permanently freeze worker processes at 100% CPU by sending a multipart/form-data request with a partial closing boundary. The missing progress guard in the parser loop causes http_mime_parse to return 0 bytes consumed without setting done or error flags, causing the calling loop to re-invoke the parser on the same buffer indefinitely, exhausting all workers and permanently disabling the server until manually restarted.
Atakujący wysyła żądanie HTTP z nagłówkiem Content-Type: multipart/form-data zawierające niekompletną (częściową) granicę zamykającą (closing boundary). W pętli przetwarzania ciała żądania funkcja http_mime_parse zwraca 0 przetworzonych bajtów, nie ustawiając przy tym flagi zakończenia (done) ani błędu (error). Brak zabezpieczenia postępu pętli (progress guard) powoduje, że pętla wywołująca parser jest wywoływana wielokrotnie na tym samym buforze w nieskończoność, co prowadzi do zajęcia 100% CPU przez wszystkie procesy robocze (worker processes) i trwałego unieruchomienia serwera.
Atakujący może trwale zablokować wszystkie procesy robocze serwera opartego na facil.io, powodując pełną niedostępność usługi (100% CPU) do czasu ręcznego restartu aplikacji. Podatność jest wyzwalana przez jednego nieuwierzytelnionego użytkownika bez żadnych uprawnień.
Należy zastosować patche dostępne u producenta zgodnie z referencjami. Do czasu aktualizacji zaleca się wdrożenie filtrowania lub ograniczania żądań multipart/form-data na poziomie reverse proxy lub firewall, aby ograniczyć ryzyko eksploatacji.
facil.io w wersjach od 0.6.0 do 0.7.6 włącznie
Szczegółowy opis techniczny podatności wraz z kodem proof-of-concept jest publicznie dostępny pod adresem wskazanym w referencjach (github.com/theopaid oraz tpaidakis.com). Obecność publicznego exploitu zwiększa ryzyko praktycznego wykorzystania podatności.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X