E ka ba kotsing e le 'ngoe ho...

E ka ba kotsing e le 'ngoe ho...

Selemong se fetileng, la 21 Hlakubele 2019, ka lenaneo la bounty bug Mail.Ru e ntle haholo e ile ea tla ho HackerOne tlaleho ea bug от maxarr. Ha o hlahisa zero byte (ASCII 0) ho parameter ea POST ea e 'ngoe ea likopo tsa webmail API tse khutlisitseng HTTP redirect, likotoana tsa memori e sa tsejoeng li ne li bonahala ho data e tsamaisang, moo likaroloana tse tsoang ho liparamente tsa GET le lihlooho tsa likopo tse ling ho ea. seva se tšoanang.

Ena ke ts'oaetso e kholo hobane ... likopo li boetse li na le li-cookie tsa seboka. Lihora tse 'maloa hamorao, ho ile ha etsoa tokiso ea nakoana e ileng ea hloekisa zero byte (joalokaha ho ile ha fumaneha hamorao, sena se ne se sa lekana, hobane ho ne ho ntse ho e-na le monyetla oa ho enta CRLF / ASCII 13, 10, e leng se u lumellang ho laola lihlooho le ho kenya letsoho. data ea karabelo ea HTTP, sena ha se bohlokoa haholo, empa se ntse se sa thabise). Ka nako e ts'oanang, bothata bo ile ba fetisetsoa ho bahlahlobisisi ba ts'ireletso le bahlahisi ho fumana le ho felisa lisosa tsa kokoana-hloko.

Mail.ru mail ke ts'ebeliso e rarahaneng haholo; palo e kholo ea likarolo tse fapaneng tsa pele-pele / morao-rao, ka bobeli mohloli o bulehileng (liteboho tse ngata ho baetsi bohle ba mahala ba software) le ba ka hare ho ntlo, ba ka kenya letsoho ho hlahiseng karabo. Re khonne ho qhelela ka thoko likarolo tsohle ntle le nginx le openresty le ho beha bothata sebakeng pele re letsa ngx.req.set_uri() ka sengoloa sa OpenResty se sa kang sa sebetsa joalo ka ha ho ne ho lebelletsoe (ho kenya null byte kapa line feed ka GET parameters ka rewrite in ngx_http_rewrite_module, eo, ho latela litokomane, e sebelisitsoeng, 'me, ho ka bonahala, e lokela ho sebetsa ka tsela e ts'oanang, e tla sebetsa. ha sebetsa). Liphello tse ka bang teng li ile tsa felisoa, ho sefa ho ile ha eketsoa ka mokhoa o tiileng kamoo ho ka khonehang, 'me ho sefa ho netefalitsoe ho felisa li-vector tsohle tse ka bang teng. Empa mochine o lebisitseng ho lutla ha litaba tsa mohopolo o ile oa lula e le sephiri. Khoeli hamorao, tlaleho ea bug e ile ea koaloa joalo ka ha e rarollotsoe, 'me tlhahlobo ea lisosa tsa kokoana e ile ea chechisoa ho fihlela linako tse betere.

OpenResty ke plugin e tsebahalang haholo e u lumellang hore u ngole mangolo a Lua ka har'a nginx, 'me e sebelisoa mererong e mengata ea Mail.ru, kahoo bothata ha boa ka ba nkoa bo rarollotsoe. 'Me ka mor'a nako e itseng, qetellong ba ile ba khutlela ho eona e le hore ba utloisise mabaka a' nete, liphello tse ka 'nang tsa e-ba teng le ho etsa litlhahiso bakeng sa bahlahisi. E kentse letsoho ho epolloa ha khoutu ea mohloli Denis Denisov и Nikolay Ermishkin. Ho ile ha etsahala hore:

  • Ho nginx, ha o sebelisa ho ngola hape ka data ea mosebelisi, ho na le monyetla oa ho fetisa molaetsa (mme mohlomong le SSRF) lits'ebetsong tse ling, empa ena ke 'nete e tsebahalang mme e lokela ho bonoa ke bahlahlobisisi ba tlhophiso ba tsitsitseng. Nginx Amplify и gixy ho tloha ho Yandex (e, re sebelisa le eona, kea leboha). Ha u sebelisa OpenResty, ho bonolo ho fosa tšobotsi ena, empa sena ha sea ama tlhophiso ea rona.

    mohlala oa tlhophiso:

    location ~ /rewrite {
        rewrite ^.*$ $arg_x;
    }
    
    location / {
        root html;
        index index.html index.htm;
    }

    liphello

    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
    ...

  • Nginx e na le kokoanyana e etsang hore mohopolo o lutle haeba mohala oa ho ngola hape o na le null byte. Ha redirect e ntšoa, nginx e fana ka buffer e ncha ea memori e tsamaellanang le bolelele bo felletseng ba mohala, empa e kopitsa mola moo ka tšebetso ea mohala moo zero byte e leng "terminator ea mola", kahoo mohala o kopitsoa feela ho fihlela zero. byte; karolo e 'ngoe ea buffer e na le data e sa tsejoeng. Ho ka fumanoa tlhahlobo e qaqileng mona.

    mohlala oa tlhophiso (^@ zero byte)

    
    location ~ /memleak {
        rewrite ^.*$ "^@asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdasdf";
    }
    
    location / {
        root html;
        index index.html index.htm;
    }

    liphello
    curl localhost:8337/secret -vv
    ...
    curl localhost:8337/memleak -vv
    ...
    Location: http://localhost:8337/secret
    ...

  • Nginx e sireletsa liparamente tsa GET ho tsoa ho ente ea litlhaku tsa ts'ebeletso mme e etsa hore ho khonehe ho sebelisa liparamente tsa GET feela ha u ngola hape. Ka hona, ha ho khonehe ho sebelisa ente hampe ka liparamente tse laoloang ke basebelisi ho nginx. Litekanyetso tsa POST ha lia sireletsoa. OpenResty e u lumella ho sebetsa ka liparamente tsa GET le POST, kahoo ha u sebelisa li-parameter tsa POST ka OpenResty, hoa khoneha ho kenya litlhaku tse khethehileng.

    mohlala oa tlhophiso:

    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;
    }
    

    sephetho:

    curl localhost:8337 -d "url=secret" -vv
    ...
    curl localhost:8337 -d "url=%00asdfasdfasdfasdfasdfasdfasdfasdf" -vv
    ...
    Location: http://localhost:8337/{...может содержать secret...}
    ...

Boitšoaro bo bong

Bothata bo ile ba tlalehoa ho baetsi ba nginx le OpenResty, bahlahisi ha ba nke bothata e le bothata ba ts'ireletso ho nginx, hobane ka nginx ka boeona ha ho na mokhoa oa ho sebelisa hampe phoso ka ho kenya litlhaku tse khethehileng, lokisa phatlalatso ya memori e hatisitsoe ka la 16 Tšitoe. Likhoeling tse 4 ho tloha tlalehong, ha ho liphetoho tse entsoeng ho OpenResty, le hoja ho ne ho e-na le kutloisiso ea hore ho ne ho hlokahala phetolelo e sireletsehileng ea ts'ebetso ea ngx.req.set_uri(). Ka la 18 Hlakubele 2020 re phatlalalitse tlhahisoleseling, ka la 21 Hlakubele OpenResty e lokollotsoe phetolelo 1.15.8.3, e eketsang netefatso ea URI.

Portswigger o ngotse sengoloa se setle mme se nkile maikutlo ho tsoa ho OpenResty le Nginx (leha maikutlo a hore ho pepesitsoe sekhechana se senyane sa mohopolo se fosahetse ebile se khelosa, sena se khethoa ke bolelele ba mohala o latelang null byte le, ha ho se na lithibelo tse hlakileng ho bolelele, bo ka laoloa ke mohlaseli).

Joale phoso e ne e le efe ’me ho ka etsoa’ng ho e thibela?

Ho bile le phoso ka nginx? E, ho ne ho le joalo, hobane ho lutla litaba tsa memori ke phoso maemong afe kapa afe.

Ho na le bothata ho OpenResty? Ee, bonyane taba ea ts'ireletso ea ts'ebetso e fanoang ke OpenResty ha e so fuputsoe le ho ngoloa.

Na ho bile le phoso ea tlhophiso / ts'ebeliso ka OpenResty? E, hobane ho ne ho se na polelo e hlakileng, ho ile ha etsoa monahano o sa netefatsoang mabapi le ts'ireletso ea ts'ebetso e sebelisoang.

Ke efe ho litšitšili tsee e leng kotsing ea ts'ireletso ka bounty ea $10000? Ho rona, sena hangata ha se bohlokoa. Ho software leha e le efe, haholo-holo mateanong a likarolo tse 'maloa, haholo-holo tse fanoeng ke merero e fapaneng le bahlahisi, ha ho motho ea ka tiisang hore likarolo tsohle tsa mosebetsi oa bona li tsejoa ebile li ngotsoe le hore ha ho na liphoso. Ka hona, ts'ireletso efe kapa efe ea ts'ireletso e etsahala hantle moo e amang ts'ireletso.

Ho sa tsotellehe boemo leha e le bofe, ke mokhoa o motle oa ho tloaeleha kapa ho lekanyetsa / ho sefa ka hohle kamoo ho ka khonehang data ea ho kenya e kenang leha e le efe e ka ntle ea module / API, ntle le haeba ho na le litaelo tse hlakileng le kutloisiso e hlakileng ea hore sena ha se hlokehe.

Phoso

Ho tsoa phihlelong sehlooho se fetileng, molemong oa ho boloka bohloeki ba puo:

bounty bounty - tlholisano ea ho tsoma likokoana-hloko
tlaleho ea bug - tsebiso ea phoso
redisetsa - ho tsamaisa tsela
mohloli o bulehileng - mohloli o bulehileng
phoso - sebetsa ka liphoso

Source: www.habr.com

Eketsa ka tlhaloso