E pili ana i hoʻokahi nāwaliwali i...

E pili ana i hoʻokahi nāwaliwali i...

Hoʻokahi makahiki i hala, Malaki 21, 2019, ma ʻO ka papahana makana ʻo Mail.Ru he mea maikaʻi loa i hele mai i HackerOne hōʻike ʻino от maxarr. I ka hoʻokomo ʻana i kahi byte zero (ASCII 0) i loko o ka ʻāpana POST o kekahi o nā noi API leka uila i hoʻihoʻi i kahi hoʻihoʻi HTTP, ʻike ʻia nā ʻāpana o ka hoʻomanaʻo uninitialized i ka ʻikepili hoʻihoʻi, kahi o nā ʻāpana mai nā palena GET a me nā poʻo o nā noi ʻē aʻe i ka hoʻokahi kikowaena.

He pilikia koʻikoʻi kēia no ka mea ... Loaʻa i nā noi nā kuki kau. He mau hola ma hope mai, ua hana ʻia kahi hoʻoponopono pōkole e kānana i ka zero byte (e like me ka mea i ʻike ʻia ma hope, ʻaʻole lawa kēia, no ka mea aia nō ka hiki ke hoʻokomo i ka CRLF / ASCII 13, 10, e hiki ai iā ʻoe ke hoʻoponopono i nā poʻo a me nā poʻo. ʻikepili o ka pane HTTP, ʻaʻole koʻikoʻi kēia, akā ʻoluʻolu ʻole). I ka manawa like, ua hoʻoili ʻia ka pilikia i nā mea loiloi palekana a me nā mea hoʻomohala e ʻimi a hoʻopau i nā kumu o ka bug.

He noi paʻakikī loa ka leka uila Mail.ru; hiki ke komo i ka nui o nā ʻāpana like ʻole o mua/hope, ʻelua kumu wehe (he nui i nā mea hoʻomohala polokalamu manuahi) a i kūkulu ʻia i loko o ka hale, hiki ke komo i ka hana ʻana i ka pane. Ua hiki iā mākou ke haʻalele i nā mea āpau koe wale ka nginx a me ka openresty a hoʻokaʻawale i ka pilikia ma mua o ke kāhea ʻana ngx.req.set_uri() i loko o kahi palapala OpenResty ʻaʻole i hana e like me ka mea i manaʻo ʻia (hoʻokomo ʻana i kahi null byte a i ʻole ka laina laina ma o nā ʻāpana GET me ka kākau hou ʻana i ka ngx_http_rewrite_module, ka mea, e like me ka palapala, hoʻohana ʻia a, me he mea lā, pono e hana ma ke ʻano like. ʻaʻole hana). Ua hoʻopau ʻia nā hopena i hiki ke hoʻopau ʻia, ua hoʻohui ʻia ka kānana e like me ka hiki, a ua hōʻoia ʻia ka kānana e hoʻopau i nā vectors hiki. Akā ʻo ka mīkini i alakaʻi ai i ka leak o nā mea hoʻomanaʻo he mea pohihihi. I hoʻokahi mahina ma hope mai, ua pani ʻia ka hōʻike bug e like me ka hoʻoholo ʻana, a ua hoʻopanee ʻia ka nānā ʻana i nā kumu o ka bug a hiki i nā manawa maikaʻi.

ʻO OpenResty kahi plugin kaulana loa e hiki ai iā ʻoe ke kākau i nā palapala Lua i loko o ka nginx, a hoʻohana ʻia ia i nā papahana Mail.ru, no laila ʻaʻole i manaʻo ʻia ka pilikia. A ma hope o kekahi manawa, ua hoʻi lākou i laila i mea e hoʻomaopopo ai i nā kumu maoli, nā hopena kūpono a me nā ʻōlelo aʻoaʻo no nā mea hoʻomohala. Ua komo i ka ʻeli ʻana i ke code kumu Denis Denisov и Nikolay Ermiskin. Ua ʻike ʻia:

  • I ka nginx, i ka wā e hoʻohana ai i ka kākau hou ʻana me ka ʻikepili mea hoʻohana, aia ka hiki ke hele i ka papa kuhikuhi (a me SSRF paha) i kekahi mau hoʻonohonoho, akā ʻike ʻia kēia a pono e ʻike ʻia e nā mea hoʻonohonoho hoʻonohonoho static ma Hoʻonui ʻo Nginx и ʻO Gixy mai Yandex (ʻae, hoʻohana mākou i kēlā, mahalo). I ka hoʻohana ʻana iā OpenResty, maʻalahi kēia hiʻohiʻona e nalo, akā ʻaʻole i pili kēia i kā mākou hoʻonohonoho.

    laʻana hoʻonohonoho:

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

    ka hopena

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

  • Loaʻa iā Nginx kahi pahu e hoʻoheheʻe ai ka hoʻomanaʻo inā loaʻa i ka laina kākau hou kahi null byte. Ke hoʻopuka ʻia kahi redirect, hoʻokaʻawale ʻo nginx i kahi hoʻomanaʻo hoʻomanaʻo hou e pili ana i ka lōʻihi o ka laina, akā kope i ka laina ma laila ma kahi hana laina kahi i hoʻopau ʻia ai ka zero byte, no laila ua kope ʻia ka laina a hiki i ka zero. byte; ʻo ke koena o ka buffer loaʻa ka ʻikepili uninitialized. Hiki ke loaʻa kahi hōʻike kikoʻī maanei.

    laʻana hoʻonohonoho (^@ zero byte)

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

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

  • Mālama ʻo Nginx i nā ʻāpana GET mai ka hoʻokomo ʻana i nā huaʻōlelo lawelawe a hiki ke hoʻohana i nā ʻāpana GET wale nō i ke kākau hou ʻana. No laila, ʻaʻole hiki ke hoʻohana i ka injection ma o nā ʻāpana hoʻohana i ka nginx. ʻAʻole mālama ʻia nā ʻāpana POST. Hāʻawi ʻo OpenResty iā ʻoe e hana me nā ʻāpana GET a me POST, no laila ke hoʻohana nei i nā ʻāpana POST ma o OpenResty, hiki ke hoʻokomo i nā huaʻōlelo kūikawā.

    laʻana hoʻonohonoho:

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

    hopena:

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

ʻO ka pane hou aku

Ua hōʻike ʻia ka pilikia i nā mea hoʻomohala o nginx a me OpenResty, ʻaʻole manaʻo nā mea hoʻomohala i ka pilikia ma ke ʻano he palekana palekana i ka nginx, no ka mea i ka nginx ponoʻī ʻaʻohe ala e hoʻohana ai i ka hewa ma o ka hoʻokomo ʻana i nā kiʻi kūikawā, hoʻoponopono hōʻike hoʻomanaʻo ua paʻi ʻia ma ka lā 16 o Dekemaba. I loko o nā mahina 4 mai ka hōʻike ʻana, ʻaʻohe hoʻololi i hana ʻia iā OpenResty, ʻoiai aia ka ʻike e pono ai kahi mana palekana o ka hana ngx.req.set_uri(). Ma Malaki 18, 2020 ua hoʻopuka mākou i ka ʻike, ma Malaki 21 ua hoʻokuʻu ʻia ʻo OpenResty mana 1.15.8.3, e hoʻohui i ka hōʻoia URI.

Portswigger palapalaʻo ia ʻatikala maikaʻi a lawe i nā manaʻo mai OpenResty a me Nginx (ʻoiai ʻo ka ʻōlelo i hōʻike ʻia he ʻāpana liʻiliʻi wale nō o ka hoʻomanaʻo ʻana he hewa a alakaʻi hewa ʻia, ua hoʻoholo ʻia kēia e ka lōʻihi o ka laina ma hope o ka null byte a, me ka ʻole o nā palena ʻokoʻa i ka lōʻihi, hiki ke hoʻomaluʻia e ka mea hoʻouka).

No laila he aha ka hewa a he aha ka mea e hiki ai ke pale aku?

Loaʻa i kahi bug ma nginx? ʻAe, ʻo ia, no ka mea, ʻo ka hoʻokuʻu ʻana i nā mea hoʻomanaʻo he hewa i kēlā me kēia hihia.

Ua loaʻa kahi bug ma OpenResty? ʻAe, ʻaʻole i noiʻi ʻia a kākau ʻia ka pilikia o ka palekana o ka hana i hāʻawi ʻia e OpenResty.

Aia kekahi hewa hoʻonohonoho/hoʻohana me OpenResty? ʻAe, no ka loaʻa ʻole o kahi ʻōlelo kikoʻī, ua hana ʻia kahi manaʻo i hōʻoia ʻole ʻia e pili ana i ka palekana o ka hana i hoʻohana ʻia.

ʻO wai o kēia mau pōpoki he mea palekana palekana me kahi makana $10000? No mākou, ʻaʻole nui kēia. I loko o kekahi polokalamu, ʻoi aku hoʻi ma ka hui ʻana o kekahi mau ʻāpana, ʻoi aku ka nui o nā mea i hāʻawi ʻia e nā papahana like ʻole a me nā mea hoʻomohala, ʻaʻohe mea hiki ke hōʻoiaʻiʻo ua ʻike ʻia nā hiʻohiʻona a pau o kā lākou hana a ʻaʻohe hewa. No laila, hiki mai kekahi pilikia palekana ma kahi e pili ai i ka palekana.

I kekahi hihia, he hana maikaʻi ia e hoʻomaʻamaʻa a hoʻopaʻa ʻia / kānana e like me ka hiki ke komo i ka ʻikepili i komo i loko o kekahi module waho / API, ke ʻole nā ​​​​ʻōlelo aʻoaʻo a me ka ʻike maopopo ʻaʻole pono kēia.

Erratum

Mai ka ʻike ʻatikala mua, no ka mālama ʻana i ka maʻemaʻe o ka ʻōlelo.

makana ʻino — hoʻokūkū hahai holoholona
hōʻike ʻino - hoʻolaha hewa
kuhikuhi hou - kuhikuhi hou
puna hāmama - kumu hāmama
kuhi hewa - hana i nā hewa

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka