
E tasi le tausaga talu ai, Mati 21, 2019, i na sau se mea lelei tele i le HackerOne от . I le faʻaofiina o le zero byte (ASCII 0) i totonu o le POST parameter o se tasi o le webmail API talosaga na toe faʻafoʻi mai se HTTP redirect, o vaega o le manatua e leʻi faʻaalia na vaaia i le toe faʻafeiloaʻi o faʻamaumauga, lea o vaega mai GET parakalafa ma ulutala o isi talosaga i le server tutusa.
O se fa'afitauli matuia lea ona... O talosaga e iai fo'i kuki o sauniga. I ni nai itula mulimuli ane, na faia ai se mea le tumau e faʻamamaina ai le zero byte (e pei ona iʻu i se taimi mulimuli ane, e leʻi lava, aua o loʻo i ai pea le avanoa e tui ai le CRLF / ASCII 13, 10, lea e mafai ai ona e faʻaogaina ulutala ma faʻamatalaga o le tali HTTP, e itiiti ifo le taua, ae e le fiafia). I le taimi lava e tasi, na tuʻuina atu le faʻafitauli i tagata suʻesuʻe saogalemu ma atinaʻe e suʻe ma faʻaumatia mafuaʻaga o le pusa.
Mail.ru meli o se faʻaoga faigata tele; o se numera tele o vaega pito i luma / tua i tua, faʻamatalaga tatala (faʻafetai tele i tagata faʻapipiʻi polokalama saoloto) ma atinaʻe i totonu, e mafai ona aʻafia i le fausiaina o le tali. Na mafai ona matou faʻateʻaina uma vaega sei vagana ai le nginx ma le openresty ma faʻavasega le faʻafitauli aʻo leʻi valaʻau i totonu o se OpenResty script e leʻi amio e pei ona faʻamoemoeina (faʻaofiina o se null byte poʻo se laina fafaga e ala ile GET parakalafa ma toe tusi i le ngx_http_rewrite_module, lea, e tusa ai ma faʻamaumauga, faʻaaogaina ma, e foliga mai, e tatau ona galue i le auala tutusa, o le a le galue). O a'afiaga e ono mafai ona fa'ate'aina, fa'aopoopoina le fa'amama i le sa'o e mafai ai, ma fa'amaonia le fa'amamaina e fa'amalo uma ai vec e mafai. Ae o le masini na mafua ai le liki o mea e manatua ai na tumau pea o se mealilo. O le masina mulimuli ane, na tapunia ai le lipoti o le pusa e pei ona foia, ma o le auiliiliga o mafuaʻaga o le pusa na tolopoina seia oʻo i taimi sili atu.
OpenResty ose fa'apipi'i ta'uta'ua e mafai ai ona e tusia ni fa'amatalaga Lua i totonu o le nginx, ma fa'aaogaina i le tele o galuega a Mail.ru, o lea e le'i manatu e fo'ia le fa'afitauli. Ma ina ua mavae sina taimi, na iu lava ina latou toe foi i ai ina ia malamalama i mafuaaga moni, taunuuga talafeagai ma faia fautuaga mo tagata atiae. Sa auai i le eliina o le code source и . Na aliali mai:
- I le nginx, pe a faʻaaogaina le toe tusi faʻatasi ma faʻamatalaga tagata faʻaoga, o loʻo i ai le avanoa o le faʻasologa o le lisi (ma atonu o le SSRF) i nisi faʻasalalauga, ae o se mea moni lauiloa ma e tatau ona iloa e suʻesuʻega faʻatulagaina faʻamau i totonu. и mai Yandex (ioe, matou te faʻaaogaina foi lena, faafetai). A faʻaaoga OpenResty, e faigofie ona misia lenei vaega, ae e leʻi afaina ai la matou faʻatulagaga.
fa'ata'ita'iga fa'atulagaina:
location ~ /rewrite { rewrite ^.*$ $arg_x; } location / { root html; index index.html index.htm; }aʻafiaga
curl localhost:8337/rewrite?x=/../../../../../../../etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
... - O le Nginx o loʻo i ai se pusa e mafua ai ona galo le manatua pe a fai o le laina toe tusi o loʻo i ai se null byte. Pe a tuʻuina atu se toe tuʻuina atu, o le nginx e tuʻuina atu se faʻamaufaʻailoga fou e fetaui ma le umi atoa o le laina, ae kopi le laina iina e ala i se galuega laina lea o le zero byte o se laina laina, o le laina e kopiina naʻo le zero. byte; E mafai ona maua se auiliiliga auiliili .
fa'ata'ita'iga fa'atulagaina (^@ zero byte)
location ~ /memleak { rewrite ^.*$ "^@asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdasdf"; } location / { root html; index index.html index.htm; }aʻafiaga
curl localhost:8337/secret -vv
...
curl localhost:8337/memleak -vv
...
Location: http://localhost:8337/secret
...
- E puipuia e Nginx ia tapula'a GET mai le tu'iina o mataitusi tautua ma mafai ai ona fa'aoga na'o GET tapula'a e toe tusi. O le mea lea, e le mafai ona faʻaaogaina le tui e ala i le faʻaogaina e le tagata faʻaoga i le nginx. E le puipuia fa'ailoga POST. OpenResty e fa'atagaina oe e galulue fa'atasi uma GET ma POST tapula'a, o lea a fa'aoga POST tapula'i e ala i OpenResty, e mafai ona tui fa'apitoa mataitusi.
fa'ata'ita'iga fa'atulagaina:
location ~ /memleak { rewrite_by_lua_block { ngx.req.read_body(); local args, err = ngx.req.get_post_args(); ngx.req.set_uri( args["url"], true ); } } location / { root html; index index.html index.htm; }i'uga:
curl localhost:8337 -d "url=secret" -vv
...
curl localhost:8337 -d "url=%00asdfasdfasdfasdfasdfasdfasdfasdf" -vv
...
Location: http://localhost:8337/{...может содержать secret...}
...
O isi tali
O le faʻafitauli na lipotia i le au atiaʻe o le nginx ma OpenResty, e le manatu le au atinaʻe le faʻafitauli o se pusa saogalemu i le nginx, aua i le nginx lava ia e leai se auala e faʻaogaina ai le mea sese e ala i le tuiina o faʻamatalaga faʻapitoa, faʻaleleia na lomia i le aso 16 o Tesema. I totonu o le 4 masina talu mai le lipoti, e leai ni suiga na faia i OpenResty, e ui lava sa i ai se malamalamaaga e manaʻomia se faʻaoga saogalemu o le ngx.req.set_uri() galuega. I le aso 18 o Mati, 2020 na matou lomia faʻamatalaga, i le aso 21 o Mati na tatala ai OpenResty , lea e fa'aopoopoina le fa'amaoniga URI.
Portswigger tala lelei ma ave faʻamatalaga mai OpenResty ma Nginx (e ui o le faʻamatalaga e naʻo se vaega itiiti o le manatua e faʻaalia e le saʻo ma faʻasesē, e faʻamoemoeina i le umi o le laina e mulimuli i le null byte ma, i le leai o ni tapulaʻa manino i luga o le umi, e mafai ona pulea e le tagata osofaʻi).
O le a la le mea sese ma o le a se mea e mafai ona fai e puipuia ai?
Sa i ai se bug i le nginx? Ioe, sa i ai, ona o le liaʻiina o mea e manatua ai mea o se mea sese i soʻo se tulaga.
Sa i ai se pusa i OpenResty? Ioe, o le mea sili e le'i su'esu'eina ma fa'amaumau le mataupu o le saogalemu o galuega fa'atino na ofoina mai e OpenResty.
Na i ai se faʻaoga / faʻaoga sese ma OpenResty? Ioe, talu ai ona o le leai o se faʻamatalaga manino, na faia ai se manatu e leʻi faʻamaonia e uiga i le saogalemu o le gaioiga o loʻo faʻaaogaina.
O le fea o nei faʻamaʻi o se faʻafitauli faʻaletonu ma le $10000 faʻamanuiaga? Mo i matou, e masani lava e le taua lenei mea. I soʻo se polokalama, aemaise lava i le vaeluaga o le tele o vaega, aemaise lava i latou na tuʻuina atu e galuega eseese ma atinaʻe, e leai se tasi e mafai ona faʻamautinoa o loʻo iloa ma faʻamaumau uma foliga o la latou galuega ma e leai ni mea sese. O le mea lea, so'o se fa'aletonu saogalemu e tupu tonu lava i le mea e afaina ai le saogalemu.
I so'o se tulaga, o se faiga lelei le fa'avasegaina pe fa'atapula'a/fa'amama i le tele e mafai ai fa'amatalaga fa'aoga e alu i so'o se module/API i fafo, se'i vagana ua i ai fa'atonuga manino ma se malamalama manino e le mana'omia.
Erratum
Mai aafiaga , mo le fa'asaoina o le mama o le gagana.
tupe mama — tauvaga tuli manu
lipoti bug - fa'amatalaga sese
toe faasino - toe faasino
puna tatala - puna tatala
sese - galue i mea sese
puna: www.habr.com
