ΠžΡ‚Π½ΠΎΡΠ½ΠΎ Π΅Π΄Π½Π° уязвимост Π²...

ΠžΡ‚Π½ΠΎΡΠ½ΠΎ Π΅Π΄Π½Π° уязвимост Π²...

ΠŸΡ€Π΅Π΄ΠΈ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π°, 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, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° прСнаписванС с потрСбитСлски Π΄Π°Π½Π½ΠΈ, ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΎΠ±Ρ…ΠΎΠΆΠ΄Π°Π½Π΅ Π½Π° дирСктория (ΠΈ вСроятно SSRF) Π² някои ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ извСстСн Ρ„Π°ΠΊΡ‚ ΠΈ трябва Π΄Π° бъдС ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ ΠΎΡ‚ статичнитС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ Π² Nginx Amplify ΠΈ Гикси ΠΎΡ‚ Yandex (Π΄Π°, Π½ΠΈΠ΅ ΡΡŠΡ‰ΠΎ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅, благодаря). ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ 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 ΠΈΠΌΠ° Π³Ρ€Π΅ΡˆΠΊΠ°, която причинява ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, Π°ΠΊΠΎ Ρ€Π΅Π΄ΡŠΡ‚ Π·Π° прСзапис ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π½ΡƒΠ»Π΅Π² Π±Π°ΠΉΡ‚. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·Π΄Π°Π΄Π΅ прСнасочванС, 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 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° слуТСбни Π·Π½Π°Ρ†ΠΈ ΠΈ ΠΏΡ€Π°Π²ΠΈ възмоТно ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ само Π½Π° 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=%00asdfasdfasdfasdfasdfasdfasdfasdf" -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.

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

И Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΠ²Π° бСшС Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ, Π·Π° Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈ?

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

ИмашС Π»ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° Π² OpenResty? Π”Π°, ΠΏΠΎΠ½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ със сигурността Π½Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π½Π°Ρ‚Π° ΠΎΡ‚ OpenResty функционалност Π½Π΅ Π΅ ΠΏΡ€ΠΎΡƒΡ‡Π΅Π½ ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½.

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

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

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

ΠΏΠ΅Ρ‡Π°Ρ‚Π½ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ

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

Π½Π°Π³Ρ€Π°Π΄Π° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ β€” ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅ ΠΏΠΎ Π»ΠΎΠ² Π½Π° Π±ΡƒΠ±ΠΎΠ»Π΅Ρ‡ΠΊΠΈ
Π΄ΠΎΠΊΠ»Π°Π΄ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ° - извСстиС Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°
прСнасочванС - прСнасочванС
ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ - ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄
Π΅Ρ€Π°Ρ‚ΡƒΠΌ - Ρ€Π°Π±ΠΎΡ‚Π° Π²ΡŠΡ€Ρ…Ρƒ Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€