Mahitungod sa usa ka kahuyang sa…

Mahitungod sa usa ka kahuyang sa…

Usa ka tuig ang milabay, Marso 21, 2019, sa bug bounty nga programa nga Mail.Ru usa ka maayo kaayo nga miabut sa HackerOne report sa bug gikan sa maxarr. Kung gipaila ang usa ka zero byte (ASCII 0) sa POST parameter sa usa sa mga hangyo sa webmail API nga nagbalik sa usa ka pag-redirect sa HTTP, ang mga piraso sa wala pa nasugdan nga panumduman makita sa data sa pag-redirect, diin ang mga tipik gikan sa mga parameter sa GET ug mga ulohan sa ubang mga hangyo sa parehas nga server.

Kini usa ka kritikal nga kahuyangan tungod kay ... Ang mga hangyo adunay usab cookies sa sesyon. Paglabay sa pipila ka oras, usa ka temporaryo nga pag-ayo ang gihimo nga nagsala sa zero byte (ingon nga kini nahimo sa ulahi, kini dili igo, tungod kay naa pa ang posibilidad sa pag-inject sa CRLF / ASCII 13, 10, nga nagtugot kanimo sa pagmaniobra sa mga ulohan ug data sa tubag sa HTTP, kini dili kaayo kritikal, apan dili maayo). Sa parehas nga oras, ang problema gibalhin sa mga analista sa seguridad ug mga developer aron makit-an ug mapapas ang mga hinungdan sa bug.

Ang Mail.ru mail usa ka komplikado kaayo nga aplikasyon; usa ka dako nga gidaghanon sa lain-laing mga front-end/back-end nga mga sangkap, parehong open source (daghang salamat sa tanan nga libre nga software developers) ug in-house nga naugmad, mahimong maapil sa pagmugna sa tubag. Nahimo namon nga dili iapil ang tanan nga mga sangkap gawas sa nginx ug openresty ug i-localize ang problema sa wala pa tawagan ngx.req.set_uri() sa usa ka OpenResty nga script nga wala molihok sama sa gipaabut (pagsulud sa usa ka null byte o line feed pinaagi sa GET nga mga parameter nga adunay pagsulat pag-usab sa ngx_http_rewrite_module, nga, sumala sa dokumentasyon, gigamit ug, ingon og, kinahanglan nga molihok sa parehas nga paagi, dili trabaho). Ang posibleng mga sangputanan giwagtang, ang pagsala gidugang sa estrikto kutob sa mahimo, ug ang pagsala gipamatud-an aron mawagtang ang tanang posibleng mga vector. Apan ang mekanismo nga mitultol sa pagtulo sa mga sulod sa memorya nagpabilin nga usa ka misteryo. Usa ka bulan ang milabay, ang report sa bug gisirado ingon nga nasulbad, ug ang pagtuki sa mga hinungdan sa bug gi-postpone hangtod sa mas maayo nga mga panahon.

Ang OpenResty usa ka sikat kaayo nga plugin nga nagtugot kanimo sa pagsulat sa mga script sa Lua sulod sa nginx, ug kini gigamit sa daghang mga proyekto sa Mail.ru, mao nga ang problema wala isipa nga nasulbad. Ug sa paglabay sa pipila ka panahon, sila sa katapusan mibalik niini aron masabtan ang tinuod nga mga rason, posible nga mga sangputanan ug paghimo og mga rekomendasyon alang sa mga developers. Miapil sa pagpangubkob sa source code Denis Denisov ΠΈ Nikolay Ermiskin. Kini nahimo nga:

  • Sa nginx, kung gamiton ang pagsulat pag-usab gamit ang datos sa gumagamit, adunay posibilidad sa pag-traversal sa direktoryo (ug tingali SSRF) sa pipila nga mga pag-configure, apan kini usa ka nahibal-an nga kamatuoran ug kinahanglan mahibal-an sa mga static nga analista sa pag-configure sa Nginx Amplify ΠΈ gixy gikan sa Yandex (oo, gigamit usab namo kana, salamat). Kung gigamit ang OpenResty, kini nga bahin dali nga makalimtan, apan wala kini makaapekto sa among pag-configure.

    pananglitan sa configuration:

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

    epekto

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

  • Ang Nginx adunay usa ka bug nga hinungdan sa pag-leak sa memorya kung ang linya sa pagsulat usab adunay usa ka null byte. Kung ang usa ka redirect gi-isyu, ang nginx naggahin ug usa ka bag-ong memory buffer nga katumbas sa tibuuk nga gitas-on sa linya, apan gikopya ang linya didto pinaagi sa usa ka function sa linya diin ang zero byte usa ka terminator sa linya, mao nga ang linya gikopya hangtod sa zero. byte; ang nahabilin nga buffer adunay wala’y nahibal-an nga datos. Makita ang usa ka detalyado nga pagtuki dinhi.

    pananglitan sa configuration (^@ zero byte)

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

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

  • Gipanalipdan sa Nginx ang mga parameter sa GET gikan sa pag-injection sa mga karakter sa serbisyo ug gipaposible nga gamiton lamang ang mga parameter sa GET sa pagsulat pag-usab. Busa, dili posible nga pahimuslan ang indeyksiyon pinaagi sa mga parameter nga kontrolado sa user sa nginx. Ang mga parameter sa POST wala gipanalipdan. Gitugotan ka sa OpenResty nga magtrabaho kauban ang GET ug POST nga mga parameter, busa kung gigamit ang mga parameter sa POST pinaagi sa OpenResty, mahimo’g posible ang pag-inject sa mga espesyal nga karakter.

    pananglitan sa configuration:

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

    resulta:

    curl localhost:8337 -d "url=secret" -vv
    ...
    curl localhost:8337 -d "url=%00asdfasdfasdfasdfasdfasdfasdfasdf" -vv
    ...
    Location: http://localhost:8337/{...ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ secret...}
    ...

Dugang reaksyon

Ang problema gitaho ngadto sa mga developers sa nginx ug OpenResty, ang mga developers wala maghunahuna sa problema ingon nga usa ka bug sa seguridad sa nginx, tungod kay sa nginx mismo walay paagi aron mapahimuslan ang sayup pinaagi sa pag-injection sa mga espesyal nga karakter, ayohon pagbutyag sa memorya gimantala niadtong Disyembre 16. Sa 4 ka bulan sukad sa report, walay mga kausaban nga gihimo sa OpenResty, bisan tuod adunay usa ka pagsabut nga ang usa ka luwas nga bersyon sa ngx.req.set_uri() function gikinahanglan. Kaniadtong Marso 18, 2020 gipatik namon ang kasayuran, kaniadtong Marso 21 gipagawas ang OpenResty bersyon 1.15.8.3, nga nagdugang URI validation.

Portswigger nagsulat maayo nga artikulo ug mikuha og mga komentaryo gikan sa OpenResty ug Nginx (bisan tuod ang komento nga gamay ra nga tipik sa memorya ang nabutyag dili husto ug makapahisalaag, kini gitino sa gitas-on sa linya nga nagsunod sa null byte ug, sa walay klaro nga mga pagdili sa gitas-on, mahimong kontrolado sa tig-atake).

Busa unsa ang sayop ug unsa ang mahimo aron mapugngan kini?

Naa bay bug sa nginx? Oo, kadto, tungod kay ang pagtulo sa mga sulud sa memorya usa ka sayup sa bisan unsang kaso.

Aduna bay bug sa OpenResty? Oo, labing menos ang isyu sa seguridad sa pagpaandar nga gitanyag sa OpenResty wala pa masusi ug dokumentado.

Naa bay configuration/gamit nga sayop sa OpenResty? Oo, tungod kay kung wala ang usa ka tin-aw nga pahayag, usa ka wala mapamatud-an nga pangagpas ang gihimo bahin sa seguridad sa gamit nga gigamit.

Hain niini nga mga bug ang usa ka kahuyang sa seguridad nga adunay $10000 nga bounty? Alang kanamo, kini sa kasagaran dili importante. Sa bisan unsang software, labi na sa intersection sa daghang mga sangkap, labi na ang gihatag sa lainlaing mga proyekto ug developer, wala’y makagarantiya nga ang tanan nga mga bahin sa ilang trabaho nahibal-an ug nadokumento ug nga wala’y mga sayup. Busa, ang bisan unsang kahuyangan sa seguridad mahitabo kung diin kini makaapekto sa seguridad.

Sa bisan unsa nga kaso, maayo nga praktis ang pag-normalize o limitahan / pagsala kutob sa mahimo ang input data nga moadto sa bisan unsang eksternal nga module / API, gawas kung adunay klaro nga mga panudlo ug usa ka tin-aw nga pagsabut nga wala kini kinahanglan.

Sayop

Gikan sa kasinatian miaging artikulo, alang sa pagpreserbar sa kaputli sa pinulongan:

bug bugay - kompetisyon sa pagpangayam sa bug
report sa bug - pahibalo sa sayup
redirect - redirection
bukas nga tinubdan - bukas nga tinubdan
sayop - pagtrabaho sa mga sayop

Source: www.habr.com

Idugang sa usa ka comment