Epekto
Ang isang umaatake ay maaaring magnakaw ng sensitibo at napatotohanang data mula sa mga user ng isang vulnerable na application na [S2]. Kung bumisita ang isang user sa isang nakakahamak na website habang naka-log in sa masusugatan na app, ang nakakahamak na site ay maaaring gumawa ng mga cross-origin na kahilingan sa API ng app at basahin ang mga tugon [S1][S2]. Maaari itong humantong sa pagnanakaw ng pribadong impormasyon, kabilang ang mga profile ng user, CSRF token, o pribadong mensahe [S2].
Root Cause
Ang CORS ay isang mekanismong batay sa HTTP-header na nagbibigay-daan sa mga server na tukuyin kung aling mga pinagmulan (domain, scheme, o port) ang pinapayagang mag-load ng mga mapagkukunang [S1]. Karaniwang lumalabas ang mga kahinaan kapag ang patakaran ng CORS ng server ay masyadong flexible o hindi maganda ang pagpapatupad ng [S2]:
- Reflected Origin Header: Binasa ng ilang server ang
Originheader mula sa isang kahilingan ng kliyente at i-echo ito pabalik saAccess-Control-Allow-Origin(ACAO) response header na [S2]. Ito ay epektibong nagbibigay-daan sa anumang website na ma-access ang mapagkukunang [S2]. - Misconfigured Wildcards: Habang pinapayagan ng
*wildcard ang anumang pinanggalingan na mag-access ng mapagkukunan, hindi ito magagamit para sa mga kahilingang nangangailangan ng mga kredensyal (tulad ng cookies o Authorization header) [S3]. Madalas na sinusubukan ng mga developer na i-bypass ito sa pamamagitan ng dynamic na pagbuo ng ACAO header batay sa kahilingang [S2]. - Naka-whitelist sa 'null': Ang ilang mga application ay nag-whitelist ng
nullna pinanggalingan, na maaaring ma-trigger ng mga na-redirect na kahilingan o mga lokal na file, na nagpapahintulot sa mga nakakahamak na site na magpanggap bilang isangnullna pinanggalingan upang makakuha ng access ZXCVFIXVIBETOVIZBE3CVFIXVIBETOKEN1ZXCV upang makakuha ng access sa ZXCVFIXVIBETOVIZBE2CVCV. - Mga Error sa Pag-parse: Ang mga pagkakamali sa regex o pagtutugma ng string kapag pinapatunayan ang
Originheader ay maaaring payagan ang mga umaatake na gumamit ng mga domain tulad ngtrusted-domain.com.attacker.com[S2].
Mahalagang tandaan na ang CORS ay hindi isang proteksyon laban sa Cross-Site Request Forgery (CSRF) [S2].
Mga Konkretong Pag-aayos
- Gumamit ng Static Whitelist: Iwasan ang dynamic na pagbuo ng
Access-Control-Allow-Originheader mula saOriginheader ng kahilingan na [S2]. Sa halip, ihambing ang pinagmulan ng kahilingan sa isang hardcoded na listahan ng mga pinagkakatiwalaang domain [S3]. - Iwasan ang 'null' na Pinagmulan: Huwag kailanman isama ang
nullsa iyong whitelist ng mga pinapayagang pinagmulan [S2]. - Paghigpitan ang Mga Kredensyal: Itakda lamang ang
Access-Control-Allow-Credentials: truekung talagang kinakailangan para sa partikular na cross-origin na pakikipag-ugnayan na [S3]. - Gumamit ng Wastong Pagpapatunay: Kung kailangan mong suportahan ang maraming pinanggalingan, tiyaking matatag ang lohika ng pagpapatunay para sa header ng
Originat hindi ma-bypass ng mga subdomain o katulad na hitsura ng mga domain na [S2].
Paano sinusuri ito ng FixVibe
Kasama na ito sa FixVibe bilang isang gated active check. Pagkatapos ng pag-verify ng domain, magpapadala ang active.cors ng parehong pinanggalingan na mga kahilingang API na may synthetic na pinagmulan ng attacker at sinusuri ang mga header ng tugon ng CORS. Nag-uulat ito ng mga arbitraryong pinagmulan, wildcard na kredensyal na CORS, at malawak na bukas na CORS sa hindi pampublikong API na mga endpoint habang iniiwasan ang ingay ng pampublikong asset.
