Π—Π° Π΅Π΄Π½Π° уязвимост в…

Π—Π° Π΅Π΄Π½Π° уязвимост в…

ΠŸΡ€Π΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π°, Π½Π° 21 ΠΌΠ°Ρ€Ρ‚ 2019 Π³., Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° бъговС Π½Π° Mail.Ru Π² HackerOne ΠΏΠΎΡΡ‚ΡŠΠΏΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€ΠΎ Π±Π°Π³Ρ€Π΅ΠΏΠΎΡ€Ρ‚ ΠΎΡ‚ maxarr. ΠŸΡ€ΠΈ внСдряванС Π½Π° Π½ΡƒΠ»Π΅Π² Π±Π°ΠΉΡ‚ (ASCII 0) Π² POST ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π½Π° Π΅Π΄ΠΈΠ½ ΠΎΡ‚ API заявкитС Π½Π° ΡƒΠ΅Π± ΠΏΠΎΡ‰Π°Ρ‚Π°, която Π²Ρ€ΡŠΡ‰Π°ΡˆΠ΅ HTTP прСнасочванС, Π² Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° прСнасочванСто сС появяваха ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, Π² ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°ΠΉ-чСсто сС Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π°Ρ…Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ GET ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ заявки към ΡΡŠΡ‰ΠΈΡ ΡΡŠΡ€Π²ΡŠΡ€.

Π’ΠΎΠ²Π° Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° уязвимост, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ заявкитС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΈ сСсийни бисквитки. Π‘Π»Π΅Π΄ няколко часа Π±Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΡˆΠ΅ нулСвия Π±Π°ΠΉΡ‚ (ΠΊΠ°ΠΊΡ‚ΠΎ впослСдствиС сС ΠΎΠΊΠ°Π·Π°, Ρ‚ΠΎΠ²Π° бСшС Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΎΡΡ‚Π°Π²Π°ΡˆΠ΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° инТСкция Π½Π° CRLF / ASCII 13, 10, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈΡ‚Π΅ ΠΈ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° HTTP ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π°; Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ, Π½ΠΎ всС ΠΏΠ°ΠΊ нСприятно). Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ бСшС ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ Π½Π° Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ†ΠΈ ΠΏΠΎ сигурността ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅ ΠΈ отстраняванС Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° бъга.

ΠŸΠΎΡ‰Π°Ρ‚Π° Mail.ru Π΅ ΠΌΠ½ΠΎΠ³ΠΎ слоТСн инструмСнт, ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ ΠΌΠΎΠΆΠ΅ Π΄Π° участват голямо количСство Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄/Π±Π΅ΠΊΠ΅Π½Π΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ (Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ Π½Π° всички Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° свободСн софтуСр), Ρ‚Π°ΠΊΠ° ΠΈ собствСни Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. УспяхмС Π΄Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΠΌ всички ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ освСн nginx ΠΈ openresty ΠΈ Π΄Π° Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π΄ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ ngx.req.set_uri() Π² OpenResty скрипта, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ сС Π΄ΡŠΡ€ΠΆΠ΅ΡˆΠ΅ Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΡ‚ΠΎ сС ΠΎΡ‡Π°ΠΊΠ²Π°ΡˆΠ΅ (Π½Π΅ Π΅ възмоТно Π΄Π° Π²ΠΊΠ°Ρ€Π°Ρ‚Π΅ Π½ΡƒΠ»Π΅Π² Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ Π½ΠΎΠ² Ρ€Π΅Π΄ Ρ‡Ρ€Π΅Π· GET ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ с прСзапис Π² ngx_http_rewrite_module, ΠΊΠΎΠΉΡ‚ΠΎ спорСд докумСнтацията сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π±ΠΈ трябвало Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ). Бяха отстранСни Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ послСдици, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ бСшС максимално строго Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ ΠΈ бСшС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ, Ρ‡Π΅ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° всички възмоТни Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈ. Но ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ водСшС Π΄ΠΎ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, остана Π·Π°Π³Π°Π΄ΠΊΠ°. Π‘Π»Π΅Π΄ мСсСц Π±ΡŠΠ³Ρ€Π΅ΠΏΠΎΡ€Ρ‚ΡŠΡ‚ бСшС Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½, Π° Π°Π½Π°Π»ΠΈΠ·ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° бъга бСшС ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ Π·Π° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π°.

OpenResty Π΅ доста популярСн плъгин, позволяващ писанСто Π½Π° Lua скриптовС Π²ΡŠΡ‚Ρ€Π΅ Π² nginx, ΠΈ Ρ‚ΠΎΠΉ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² няколко ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Mail.ru, Π·Π°Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π½Π΅ сС ΡΡ‡ΠΈΡ‚Π°ΡˆΠ΅ Π·Π° Ρ€Π΅ΡˆΠ΅Π½. И слСд извСстно Π²Ρ€Π΅ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ сС Π²ΡŠΡ€Π½Π°Ρ…Π° Π½Π° Π½Π΅Π³ΠΎ, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ истинскитС ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ, Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΈΡ‚Π΅ послСдствия ΠΈ Π΄Π° ΡΡŠΡΡ‚Π°Π²ΡΡ‚ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅. Π’ Ρ€Π°Π·ΠΊΠΎΠΏΠΊΠΈΡ‚Π΅ Π½Π° изходния ΠΊΠΎΠ΄ участваха ДСнис ДСнисов ΠΈ Николай Π•Ρ€ΠΌΠΈΡˆΠΊΠΈΠ½Π£ΡΡ‚Π°Π½ΠΎΠ²Π΅Π½ΠΎ Π΅, Ρ‡Π΅:

  • Π’ nginx, ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° rewrite с потрСбитСлски Π΄Π°Π½Π½ΠΈ, ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° directory traversal (ΠΈ вСроятно SSRF) Π² някои ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ извСстСн Ρ„Π°ΠΊΡ‚ ΠΈ трябва Π΄Π° бъдС ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΎ ΠΎΡ‚ статичнитС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² Nginx Amplify ΠΈ Gixy ΠΎΡ‚ ЯндСкс (Π΄Π°, Π½ΠΈΠ΅ ΡΡŠΡ‰ΠΎ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅, благодаря). ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° OpenResty, Ρ‚Π°Π·ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ лСсно ΠΌΠΎΠΆΠ΅ Π΄Π° сС пропуснС, Π½ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° конфигурация Π½Π΅ Π΅ засСгната.

    ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Π° конфигурация:

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

    Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚

    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 ΠΈΠΌΠ° Π³Ρ€Π΅ΡˆΠΊΠ°, която Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π°ΠΊΠΎ Ρ€Π΅Π΄ΡŠΡ‚ rewrite ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π½ΡƒΠ»Π΅Π² Π±Π°ΠΉΡ‚. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚, nginx отдСля Π½ΠΎΠ² Π±ΡƒΡ„Π΅Ρ€ ΠΏΠ°ΠΌΠ΅Ρ‚, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ Π½Π° ΠΏΡŠΠ»Π½Π°Ρ‚Π° дълТина Π½Π° Ρ€Π΅Π΄Π°, Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π° Ρ€Π΅Π΄Π° Ρ‡Ρ€Π΅Π· стрингова функция, Π² която нулСвият Π±Π°ΠΉΡ‚ Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ‚ΠΎΡ€ Π½Π° Ρ€Π΅Π΄Π°, ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ€Π΅Π΄ΡŠΡ‚ сС ΠΊΠΎΠΏΠΈΡ€Π° само Π΄ΠΎ нулСвия Π±Π°ΠΉΡ‚, Π° ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊΡŠΡ‚ ΠΎΡ‚ Π±ΡƒΡ„Π΅Ρ€Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½ Π°Π½Π°Π»ΠΈΠ· ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ Ρ‚ΡƒΠΊ.

    ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Π° конфигурация (^@ Π½ΡƒΠ»Π΅Π² Π±Π°ΠΉΡ‚)

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

    Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚
    curl localhost:8337/secret -vv
    ...
    curl localhost:8337/memleak -vv
    ...
    Location: http://localhost:8337/secret
    ...

  • Nginx Π·Π°Ρ‰ΠΈΡ‚Π°Π²Π° GET ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚ инТСкция Π½Π° слуТСбни символи ΠΈ Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² rewrite само Π½Π° GET ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, СксплоатиранСто Π½Π° инТСкция Ρ‡Ρ€Π΅Π· ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ потрСбитСля ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² nginx Π½Π΅ Π΅ възмоТно. POST ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΎΠ±Π°Ρ‡Π΅ Π½Π΅ са Π·Π°Ρ‰ΠΈΡ‚Π΅Π½ΠΈ. OpenResty позволява Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ с GET, ΠΈ с POST ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° POST ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ€Π΅Π· OpenResty сС появява Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° инТСкция Π½Π° спСциални символи.

    ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Π° конфигурация:

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

    Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚:

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

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π° рСакция

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ бСшС Π΄ΠΎΠΊΠ»Π°Π΄Π²Π°Π½ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° nginx ΠΈ OpenResty, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π΅ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ° Π² сигурността Π² nginx, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² самия nginx няма Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Сксплоатация Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° Ρ‡Ρ€Π΅Π· инТСкция Π½Π° спСциални символи, ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ° ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π° Π½Π° 16 Π΄Π΅ΠΊΠ΅ΠΌΠ²Ρ€ΠΈ. Π—Π° 4 мСсСца ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° Ρ€Π΅ΠΏΠΎΡ€Ρ‚Π°, Π² OpenResty ΡΡŠΡ‰ΠΎ Π½Π΅ бяха Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ имашС разбиратСлство, Ρ‡Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° бСзопасна вСрсия Π½Π° функцията ngx.req.set_uri(). На 18 ΠΌΠ°Ρ€Ρ‚ 2020 ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ…ΠΌΠ΅ информация, Π½Π° 21 ΠΌΠ°Ρ€Ρ‚ OpenResty ΠΈΠ·Π΄Π°Π΄Π΅ вСрсия 1.15.8.3, която добавя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° URI.

Portswigger написа Π΄ΠΎΠ±Ρ€Π° статия ΠΈ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ ΠΎΡ‚ OpenResty ΠΈ Nginx (вярно, ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΡŠΡ‚, Ρ‡Π΅ сС Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π° само ΠΌΠ°Π»ΠΊΠ° част ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π΅ Π½Π΅Π²Π΅Ρ€Π΅Π½ ΠΈ ΠΏΠΎΠ΄Π²Π΅ΠΆΠ΄Π°Ρ‰; Ρ‚ΠΎΠ²Π° сС опрСдСля ΠΎΡ‚ Π΄ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π° Π½Π° Ρ€Π΅Π΄Π°, слСдващ нулСвия Π±Π°ΠΉΡ‚, ΠΈ ΠΏΡ€ΠΈ ΠΎΡ‚ΡΡŠΡΡ‚Π²ΠΈΠ΅ Π½Π° явни ограничСния Π·Π° дълТина, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° ΠΎΡ‚ атакуващия).

Каква бСшС Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ, Π·Π° Π΄Π° я ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΠΌ?

ИмашС Π»ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° Π² nginx? Π”Π°, имашС, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π΅ във всСки случай Π³Ρ€Π΅ΡˆΠΊΠ°.

ИмашС Π»ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° Π² OpenResty? Π”Π°, ΠΏΠΎΠ½Π΅ΠΆΠ΅ Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π·Π° бСзопасността Π½Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π½Π°Ρ‚Π° функционалност Π½Π° OpenResty Π½Π΅ бСшС изслСдван ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½.

Допусната Π»ΠΈ Π΅ Π³Ρ€Π΅ΡˆΠΊΠ° Π² конфигурацията / ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° OpenResty? Π”Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈ липса Π½Π° ясно ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅, бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° бСзопасността Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°Ρ‚Π° функционалност.

Коя ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ Π΅ уязвимост с Π±Π°Π³Π° Π½Π° $10000? Π—Π° нас Ρ‚ΠΎΠ²Π° Π΄ΠΎ извСстна стСпСн Π½Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ. Π’ΡŠΠ² всяко ПО, особСно Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π°Ρ‚Π° Π½Π° няколко ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, прСдоставСни ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, Π½ΠΈΠΊΠΎΠΉ ΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ всички особСности Π½Π° тяхната Ρ€Π°Π±ΠΎΡ‚Π° са извСстни ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ ΠΈ Ρ‡Π΅ няма Π³Ρ€Π΅ΡˆΠΊΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ всяка уязвимост Π·Π° бСзопасността възниква Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΌ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ засяга сигурността.

Π’ΡŠΠ² всСки случай, Π΄ΠΎΠ±Ρ€Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π΅ Π΄Π° сС Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ ΠΈΠ»ΠΈ максимално ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Ρ‚/Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ‚ Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‚ΠΈΠ²Π°Ρ‚ към външСн ΠΌΠΎΠ΄ΡƒΠ»/API, Π°ΠΊΠΎ няма ясни указания ΠΈ Π΅Π΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Errata

По ΠΎΠΏΠΈΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° статия, Π·Π° Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ чистотата Π½Π° Π΅Π·ΠΈΠΊΠ°:

Π±Π°Π³ Π±Π°ΡƒΠ½Ρ‚ΠΈ β€” конкурс Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ
Π±Π°Π³Ρ€Π΅ΠΏΠΎΡ€Ρ‚ β€” извСстиС Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°
Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ β€” прСнасочванС
ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ β€” с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄
errata β€” Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster