The OpenNET Project / Index page

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

/ Web-технологии / JavaScript
·29.10 В SQLite добавлена поддержка WASM для использования СУБД в web-браузере (114 +10)
  Разработчики SQLite развивают проект по реализации возможности компиляции библиотеки в промежуточный код WebAssembly, способный запускаться в web-браузере и пригодный для организации работы с БД из web-приложений на языке JavaScript. Код для поддержки WebAssembly добавлен в основной репозиторий проекта. В отличие от API WebSQL, в основе которого лежит SQLite, WASM SQLite полностью изолирован от браузера и не влияет на его безопасность (Google решил отказаться от поддержки WebSQL в Chrome после нескольких уязвимостей в SQLite, которые можно было эксплуатировать через WebSQL для атаки на браузер).

Целью проекта является предоставление рабочей JavaScript-обвязки, идентичной по функциональности с API SQLite. Web-разработчикам предоставляется высокоуровневый объектно-ориентированный интерфейс для работы с данными в стиле sql.js или Node.js, обвязка над низкоуровневым C API и API на базе механизма Web Worker, позволяющий создавать асинхронные обработчики, выполняемые в отдельных потоках. Для скрытия тонкостей организации работы с потоками поверх API на базе Web Worker также развивается вариант программного интерфейса на основе механизма Promise.

Данные, которые web-приложения сохраняют в WASM-версии SQLite, могут быть локализованы в рамках текущего сеанса (теряются после перезагрузки страниц) или сохранены на стороне клиента (сохраняются между сеансами). Для постоянного хранения подготовлены бэкенды для размещения данных в локальной ФС при помощи OPFS (Origin-Private FileSystem, расширение к API File System Access, доступное пока только в браузерах на основе WebKit и Chromium) и в локальных браузерных хранилищах на базе API window.localStorage и window.sessionStorage. В случае применения localStorage/sessionStorage данные отражаются в соответствующие хранилища в формате ключ/значение, а при применении OPFS предусмотрено два варианта: симуляция виртуальной ФС при помощи WASMFS и отдельная реализация sqlite3_vfs, предлагающая слой SQLite VFS на базе OPFS.

Для сборки SQLite в WASM-представление задействован компилятор Emscripten (достаточно собрать расширение ext/wasm: "./configure --enable-all; make sqlite3.c; cd ext/wasm; make"). На выходе формируются файлы sqlite3.js и sqlite3.wasm, которые можно включить в свой JavaScript-проект (пример HTML и JavaScript).

  1. Главная ссылка к новости
  2. OpenNews: Проект libSQL начал развитие форка СУБД SQLite
  3. OpenNews: Выпуск СУБД SQLite 3.39
  4. OpenNews: Доступен предварительный вариант стандарта WebAssembly 2.0
  5. OpenNews: Уязвимость в SQLite, позволяющая удалённо атаковать Chrome через WebSQL
  6. OpenNews: Проект Postgres WASM подготовил работающее в браузере окружение с СУБД PostgreSQL
Обсуждение (114 +10) | Тип: К сведению |


·25.10 Выпуск Brython 3.11, реализации языка Python для web-браузеров (70)
  Представлен релиз проекта Brython 3.11 (Browser Python) с реализацией языка программирования Python 3 для выполнения на стороне web-браузера, позволяющей использовать Python вместо JavaScript для разработки скриптов для Web. Код проекта написан на языке Python и распространяется под лицензией BSD.

Подключив библиотеки brython.js и brython_stdlib.js, web-разработчик может использовать язык Python для определения логики работы сайта на стороне клиента, применяя Python вместо JavaScript. Для включения Python-кода на страницы используется тег <script> с mime-типом "text/python". Допускается как встраивание кода на страницу, так и загрузка внешних скриптов (<script type="text/python" src="test.py">). Из скрипта предоставляется полный доступ к элементам и событиям DOM. Помимо доступа к стандартной библиотеке Python предлагаются специализированные библиотеки для взаимодействия с DOM и JavaScript-библиотеками, такими как jQuery, D3, Highcharts и Raphael. Поддерживается использование CSS-фреймворков Bootstrap3, LESS и SASS.

Выполнение Python-кода из блоков <script> производится через предварительную компиляцию этого кода, выполняемую обработчиком Brython после загрузки страницы. Компиляция инициируется при помощи вызова функции brython(), например через добавление "<body onload="brython()">". На основе Python-кода формируется представление на языке JavaScript, которое затем выполняется штатным JavaScript-движком браузера (для сравнения, проект PyPy.js предлагает для выполнения Python-кода в браузере скомпилированный в asm.js интерпретатор CPython, а Skulpt реализует интерпретатор на JavaScript).

Итоговая производительность большинства операций во встраиваемых в web-страницы Python-сценариях близка к производительности CPython. Задержка возникает только на этапе компиляции, но для её устранения предоставляется возможность загрузки предварительно скомпилированного в JavaScript кода, которая применяется для ускорения загрузки стандартной библиотеки (Brython предоставляет инструментарий для создания JavaScript-библиотек на основе модулей Python).

Новый выпуск примечателен обеспечением совместимости с CPython 3.11 и реализацией большей части новых возможностей данной ветки, включая поддержку групп исключений и выражения "except*", детализации проблемных выражений в диагностических сообщениях и прикрепления примечаний к исключениям.

  1. Главная ссылка к новости
  2. OpenNews: Проект PyScript развивает платформу для выполнения Python-скриптов в web-браузере
  3. OpenNews: Выпуск Brython 3.10, реализации языка Python для web-браузеров
  4. OpenNews: В JIT-компиляторе Pyston-lite реализована поддержка Python 3.10
  5. OpenNews: Выпуск Nuitka 1.1, компилятора для языка Python
  6. OpenNews: Выпуск языка программирования Python 3.11
Обсуждение (70) | Тип: Программы |


·19.10 Доступна серверная JavaScript-платформа Node.js 19.0 (82 –1)
  Состоялся релиз Node.js 19.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 19 отнесён к ветке с обычным сроком поддержки, обновления для которой будут выпускаться до июня 2023 года. В ближайшие дни будет завершена стабилизация ветки Node.js 18, которая получит статус LTS и будет поддерживаться до апреля 2025 года. Сопровождение прошлой LTS-ветки Node.js 16.0 продлится до сентября 2023 года, а позапрошлой LTS-ветки 14.0 до апреля 2023 года.

Основные улучшения:

  • Движок V8 обновлён до версии 10.7, применяемой в Chromium 107. Из изменений в движке по сравнению с веткой Node.js 18 отмечается реализация третьей версии API Intl.NumberFormat, в которой добавлены новые функции formatRange(), formatRangeToParts() и selectRange(), группировка множеств, новые опции округления и задания точности, возможность интерпретации строк как десятичных чисел. Также обновлены входящие в комплект зависимости llhttp 8.1.0 и npm 8.19.2.
  • Предложена экспериментальная команда "node --watch" с реализацией режима наблюдения, обеспечивающего перезапуск процесса при изменении импортированного файла (например, в случае выполнения "node --watch index.js" процесс будет автоматически перезапущен при изменении index.js).
  • Для всех исходящих HTTP/HTTPS-соединений включена поддержка механизма HTTP 1.1 Keep-Alive, оставляющего соединение определённое время открытым для обработки в рамках одного соединения нескольких HTTP-запросов. Предполагается, что применение Keep-Alive позволит повысить пропускную способность и производительность. По умолчанию таймаут удержания соединения открытым выставлен в 5 секунд. В реализацию HTTP-клиента добавлена поддержка разбора HTTP-заголовка Keep-Alive в ответах сервера, а в реализацию HTTP-сервера Node.js добавлено автоматическое отсоединение неактивных клиентов, использующих Keep-Alive.
  • В разряд стабильных переведён API WebCrypto, за исключением функций, использующих алгоритмы Ed25519, Ed448, X25519 и X448. Для доступа к модулю WebCrypto теперь можно использовать globalThis.crypto или require('node:crypto').webcrypto.
  • Удалена поддержка инструментариев трассировки DTrace, SystemTap и ETW (Event Tracing for Windows), поддержание которых признано нецелесообразным из-за сложности сопровождения в актуальном виде при отсутствии должного плана их поддержки.

Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры.

Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core).

По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных.

  1. Главная ссылка к новости
  2. OpenNews: Доступна серверная JavaScript-платформа Node.js 18.0
  3. OpenNews: Атака на Node.js через манипуляции с прототипами объектов JavaScript
  4. OpenNews: Уязвимость в http2-модуле из состава Node.js
  5. OpenNews: Автор Node.js представил защищённую JavaScript-платформу Deno 1.0
  6. OpenNews: В рамках проекта PurpleJS развивается альтернатива Node.js, работающая поверх JVM
Обсуждение (82 –1) | Тип: Программы |


·19.09 Facebook открыл код фреймворка для выявления утечек памяти в JavaScript (117)
  Компания Facebook (запрещена в РФ) открыла исходные тексты инструментария memlab, предназначенного для анализа срезов состояния динамически распределяемой памяти (кучи), определения стратегии оптимизации работы с памятью и выявления утечек памяти, возникающих при выполнении кода на языке JavaScript. Код открыт под лицензией MIT.

Фреймворк был создан для разбора причин большого потребления памяти при работе с web-сайтами и web-приложениями. Например, с помощью memlab проводился анализ потребления памяти при использовании новой версии сайта Facebook.com, который позволил выявить утечки, приводившие к аварийному завершению браузера на стороне клиента из-за исчерпания свободной памяти.

Причинами утечек памяти при выполнении JavaScript-кода может быть наличие скрытых ссылок на объекты, из-за которых сборщик мусора не может высвободить занимаемую объектом память, неразумное кэширование значений или реализация бесконечной прокрутки без вытеснения старых элементов списка. Например в нижеприведённом коде в Chrome утечка памяти возникает из-за объекта "obj", несмотря на то, что ему присваивается значение null, так как Chrome сохраняет внутренние ссылки на выводимые объекты для предоставления возможности их последующего инспектирования в web-консоли.


  var obj = {};
  console.log(obj);
  obj = null;

Основные возможности memlab:

  • Выявление утечек памяти в браузере. Memlab позволяет автоматически сравнивать слепки состояния динамической памяти, выявлять утечки памяти и агрегировать результаты.
  • Объектно-ориентированный API для перебора кучи, позволяющий воплощать собственные алгоритмы выявления утечек и реализовывать системы анализа слепков состояния кучи. Поддерживается анализ кучи для браузеров на основе движка Chromium, а также для платформ Node.js, Electron и Hermes.
  • Интерфейс командной строки и API для поиска возможностей по оптимизации использования памяти.
  • Система assert-ов для Node.js, позволяющая создавать unit-тесты и выполнять программы на базе Node.js для создания срезов собственного состояния, проверки своей памяти или написания расширенных assert-проверок.

  1. Главная ссылка к новости
  2. OpenNews: Facebook выделил C++, Rust, Python и Hack в качестве предпочтительных языков программирования
  3. OpenNews: Facebook опубликовал модель для машинного перевода, поддерживающую 200 языков
  4. OpenNews: Facebook представил механизм TMO, позволяющий экономить 20-32% памяти на серверах
  5. OpenNews: Facebook открыл код Lexical, библиотеки для создания редакторов текста
  6. OpenNews: Facebook открыл код статического анализатора Mariana Trench
Обсуждение (117) | Тип: Программы |


·13.09 Представлен кросс-платформенный web-браузер Ladybird (196 +58)
  Разработчики операционной системы SerenityOS представили кросс-платформенный web-браузер Ladybird, основанный на движке LibWeb и JavaScript-интерпретаторе LibJS, разработка которых ведётся проектом с 2019 года. Графический интерфейс основан на библиотеке Qt. Код написан на языке C++ и распространяется под лицензией BSD. Поддерживается работа в Linux, macOS, Windows (WSL), Android и Haiku.

Интерфейс оформлен в классическом стиле и поддерживает вкладки. Браузер построен с использованием собственного web-стека, который помимо LibWeb и LibJS включает библиотеку для отрисовки текста и 2D-графики LibGfx, движок для регулярных выражений LibRegex, XML-парсер LibXML, интерпретатор промежуточного кода WebAssembly (LibWasm), библиотеку для работы с Unicode LibUnicode, библиотеку для преобразования текстовых кодировок LibTextCodec, парсер для разметки Markdown (LibMarkdown) и библиотеку LibCore с общим набором полезных функций, таких как преобразование времени, ввода/вывод и обработка MIME-типов.

Браузер поддерживает основные web-стандарты и успешно проходит тесты Acid3. Имеется поддержка протоколов HTTP и HTTPS. Из планов на будущее упоминается реализация поддержки многопроцессного режима работы, в котором каждая вкладка обрабатывается в отдельном процессе, а также проведение оптимизаций производительности и реализация расширенных возможностей, таких как CSS flexbox и CSS grid.

Изначально проект был создан в июле как работающая в Linux обвязка для отладки web-стека операционной системы SerenityOS, развивающей собственный браузер SerenityOS Browser. Но через некоторое время стало понятно, что разработка вышла за рамки отладочной утилиты и может использоваться в качестве обычного браузера (проект пока находится на стадии развития и не готов для повседневного использования). Web-стек также трансфромировался из специфичной для SerenityOS разработки в кросс-платформенный браузерный движок.

  1. Главная ссылка к новости
  2. OpenNews: Развиваемый проектом SerenityOS web-браузер успешно прошёл тесты Acid3
  3. OpenNews: Проект SerenityOS развивает Unix-подобную ОС c графическим интерфейсом
  4. OpenNews: Выпуск web-браузера Otter 1.0.3 с интерфейсом в стиле Opera 12
  5. OpenNews: Доступны web-браузеры qutebrowser 2.5 и Min 1.24
  6. OpenNews: Доступен web-браузер CENO 1.4.0, ориентированный на обход цензуры
Обсуждение (196 +58) | Тип: Программы |


·09.08 В NPM планируют использовать Sigstore для подтверждения подлинности пакетов (90 –2)
  GitHub выставил на обсуждение предложение по внедрению сервиса Sigstore для верификации пакетов по цифровым подписям и ведения публичного лога для подтверждения подлинности при распространении релизов. Применение Sigstore позволит реализовать дополнительный уровень защиты от атак, нацеленных на подмену программных компонентов и зависимостей (supply chain). Например, внедряемое изменение защитит исходные тексты проектов в случае компрометации учётной записи разработчика одной из зависимостей в NPM и формирования злоумышленником обновления пакета с вредоносным кодом.

Благодаря новому уровню защиты разработчики смогут привязать сформированный пакет к использованному исходному коду и сборочному окружению, предоставив пользователю возможность убедиться, что содержимое пакета соответствует содержимому исходных текстов в основном репозитории проекта. Применение Sigstore существенно упрощает процесс управления ключами и позволяет избавиться от сложностей, связанных с регистрацией, отзывом и управлением криптографическими ключами. Sigstore преподносится как аналог Let’s Encrypt для кода, предоставляющий сертификаты для заверения кода цифровыми подписями и инструментарий для автоматизации проверки.

Вместо постоянных ключей в Sigstore применяются короткоживущие эфемерные ключи, которые генерируются на основе полномочий. Используемый для подписи материал отражается в защищённом от внесения изменений публичном логе, который позволяет убедиться, что автор подписи именно тот, за кого себя выдаёт, и подпись сформирована тем же участником, что отвечал за прошлые релизы. Для обеспечения целостности и защиты от искажения данных задним числом применяется древовидная структура "дерево Меркла" (Merkle Tree), в которой каждая ветка верифицирует все нижележащие ветки и узлы благодаря совместному (древовидному) хешированию. Имея конечный хеш, пользователь может удостовериться в корректности всей истории операций, а также в корректности прошлых состояний БД (корневой проверочный хеш нового состояния базы вычисляется с учётом прошлого состояния).

  1. Главная ссылка к новости
  2. OpenNews: Red Hat и Google представили Sigstore, сервис для криптографической верификации кода
  3. OpenNews: Атака на немецкие компании через NPM-пакеты
  4. OpenNews: GitHub раскрыл данные о взломе инфраструктуры NPM и выявлении открытых паролей в логах
  5. OpenNews: В NPM включена обязательная двухфакторная аутентификация для 500 самых популярных пакетов
  6. OpenNews: Выпуск пакетного менеджера NPM 8.15 с поддержкой локальной проверки целостности пакетов
Обсуждение (90 –2) | Тип: К сведению |


·27.07 Атака на Node.js через манипуляции с прототипами объектов JavaScript (118 +13)
  Исследователи Центра Гельмгольца по информационной безопасности (CISPA) и Королевского технологического института (Швеция) проанализировали применимость техники засорения прототипа объектов JavaScript ("prototype pollution") для создания атак на платформу Node.js и популярные приложения на её основе, приводящих к выполнению кода.

Метод засорения прототипа использует особенность языка JavaScript, позволяющую добавить новые свойства в корневой прототип любого объекта. В приложениях могут встречаться блоки кода (гаджеты), на работу которых влияет подставленное свойство, например, в коде может быть конструкция вида 'const cmd = options.cmd || "/bin/sh"', логика работы которой будет изменена, если атакующий сумеет подставить свойство "cmd" в корневой прототип.

Для успешного совершения атаки требуется, чтобы в приложении поступающие извне данные могли использоваться для создания нового свойства в корневом прототипе объекта, а также чтобы в ходе выполнения встречался гаджет, зависящий от изменённого свойства. Изменение прототипа осуществляется благодаря обработке в Node.js служебных свойств "__proto__" и "constructor". Свойство "__proto__" возвращает прототип класса объекта, а свойство "constructor" возвращает функцию, используемую для создания объекта.

Если в коде приложения встречается присвоение "obj[a][b] = value" и значения выставляются из внешних данных, атакующий может выставить "a" в значение "__proto__" и добиться установки своего свойства с именем "b" и значением "value" в корневом прототипе объекта (obj.__proto__.b = value;), при этом выставленное в прототипе свойство будет видно во всех объектах. Аналогично если в коде встречаются выражения вида "obj[a][b][c] = value", выставив "a" в значение "constructor", а "b" в "prototype" во всех существующих объектах можно определить новое свойство с именем "c" и значением "value".

Пример изменения прототипа:


   const o1 = {};
   const o2 = new Object () ;
   o1.__proto__.x = 42; // создаём в корневом прототипе свойство "x" 
   console.log (o2.x);  // обращаемся к свойству "x" из другого объекта
   // на выходе получим 42, так как через объект o1 был изменён корневой прототип, используемый в том числе и в объекте o2

Пример уязвимого кода:


   function entryPoint (arg1, arg2, arg3){
      const obj = {};
      const p = obj[arg1];
      p[arg2] = arg3;
      return p; 
   }

Если аргументы функции entryPoint формируются из входных данных, то атакующий может передать в arg1 значение "__proto__" и создать в корневом прототипе свойство с любым именем. Если передать в arg2 значение "toString", а в arg3 - 1, можно определить свойство "toString" (Object.prototype.toString=1) и добиться краха приложения во время вызова функции toString().

В качестве примера ситуаций, которые могут привести к выполнению кода атакующего, приводится создание свойств "main", "shell", "exports", "contextExtensions" и "env". Например, атакующий может создать в корневом прототипе объекта свойство "main", записав в него путь к своему скрипту (Object.prototype.main = "./../../pwned.js") и данное свойство будет вызвано в момент выполнения в коде конструкции require("my-package"), если подключаемый пакет явно не определяет в package.json свойство "main" (если свойство не определено, оно будет получено из корневого прототипа). Аналогично могут быть подставлены свойства "shell", "exports" и "env":


   let rootProto = Object.prototype;
   rootProto["exports"] = {".":"./changelog.js"};
   rootProto["1"] = "/path/to/npm/scripts/";
   // trigger call
   require ("./target.js");

   Object.prototype.main = "/path/to/npm/scripts/changelog.js";
   Object.prototype.shell = "node";
   Object.prototype.env = {};
   Object.prototype.env.NODE_OPTIONS = "--inspect-brk=0.0.0.0:1337";
   // trigger call
   require ("bytes");

Исследователи проанализировали 10 тысяч NPM-пакетов, имеющих наибольшее число зависимостей, и выявили, что 1958 из них не имеют свойства main в package.json, 4420 используют относительные пути в выражении require, а 355 напрямую используют API для подстановки команд.

В качестве работающего примера можно привести эксплоит для атаки на бэкенд Parse Server, переопределяющий свойство evalFunctions. Для упрощения выявления подобных уязвимостей разработан инструментарий, комбинирующий методы статического и динамического анализа. В ходе тестирования Node.js было выявлено 11 гаджетов, которые можно использовать для организации атак, приводящих к выполнению кода атакующего. Помимо Parse Server, две эксплуатируемые уязвимости также были выявлены в NPM CLI.

  1. Главная ссылка к новости
  2. OpenNews: Атака по извлечению данных из кэша CPU, реализуемая в web-браузере без JavaScript
  3. OpenNews: Использование JavaScript для атаки через манипуляцию с содержимым буфера обмена
  4. OpenNews: Разработан метод атаки на уязвимость в DRAM-памяти с использованием JavaScript
  5. OpenNews: Атака через JavaScript по определению содержимого L3-кэша CPU
Обсуждение (118 +13) | Тип: Проблемы безопасности |


·27.07 Выпуск пакетного менеджера NPM 8.15 с поддержкой локальной проверки целостности пакетов (27 +6)
  Компания GitHub представила выпуск пакетного менеджера NPM 8.15, входящего в поставку Node.js и применяемого для распространения модулей на языке JavaScript. Отмечается, что ежедневно через NPM загружается более 5 миллиардов пакетов.

Ключевые изменения:

  • Добавлена новая команда "audit signatures" для проведения локального аудита целостности устанавливаемых пакетов, не требующая манипуляций с утилитами PGP. Новый механизм верификации основан на применении цифровых подписей на базе алгоритма ECDSA и использовании HSM (Hardware Security Module) для управления ключами. Все пакеты в репозитории NPM уже переподписаны с использованием новой схемы.
  • Объявлена доступной для повсеместного применения расширенная двухфакторная аутентификация. Добавлен упрощённый процесс входа и публикации в npm CLI, работающий через браузер. При указании опции "--auth-type=web" для аутентификации учётной записи используется web-интерфейс, открываемый в браузере. Параметры сеанса запоминаются. Для установки сеанса требуется подтвердить email при помощи одноразовых паролей (OTP), а при выполнении операций в уже установленных сеансах достаточно подтвердить второй этап двухфакторной аутентификации. Предоставляется режим запоминания, позволяющий в течение 5 минут выполнять операции публикации с того же IP и с тем же токеном без дополнительных запросов двухфакторной аутентификации.
  • Предоставлена возможность привязки учётных записей GitHub и Twitter к NPM, позволяющая подключаться к NPM, используя учётные записи в GitHub и Twitter.

Из дальнейших планов упоминается включение обязательной двухфакторной аутентификации для учётных записей, связанных с пакетами, насчитывающими более 1 млн загрузок в неделю или имеющих более 500 зависимых пакетов. В настоящее время обязательная двухфакторная аутентификация применяется только для 500 самых популярных пакетов.

  1. Главная ссылка к новости
  2. OpenNews: В NPM включена обязательная двухфакторная аутентификация для 500 самых популярных пакетов
  3. OpenNews: GitHub раскрыл данные о взломе инфраструктуры NPM и выявлении открытых паролей в логах
  4. OpenNews: Атака на немецкие компании через NPM-пакеты
  5. OpenNews: Уязвимость в репозитории NPM, позволяющая добавить сопровождающего без подтверждения
  6. OpenNews: Опубликован анализатор, выявивший 200 вредоносных пакетов в NPM и PyPI
Обсуждение (27 +6) | Тип: Программы |


·20.06 Опубликован инструментарий для определения дополнений, установленных в Chrome (53 +6)
  Опубликован инструментарий с реализацией метода определения дополнений, установленных в браузере Chrome. Полученный список дополнений может использоваться для увеличения точности пассивной идентификации конкретного экземпляра браузера, в сочетании с другими косвенными признаками, такими как разрешение экрана, особенности WebGL, списки установленных плагинов и шрифтов. Предложенная реализация проверяет установку более 1000 дополнений. Для проверки своей системы предложена online-демонстрация.

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

Web-страницы могут запрашивать поставляемые в дополнении ресурсы при помощи метода fetch (например "fetch('chrome-extension://okb....nd5/test.png')"), возвращение которым значения "false" обычно свидетельствует о том, что дополнение не установлено. Для блокирования определения дополнения по наличию ресурсов некоторые дополнения генерируют проверочный токен, необходимый для доступа к ресурсу. Вызов fetch без указания токена всегда завершается неудачей.

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

Некоторые дополнения, которые не включают доступные извне ресурсы, можно определить по дополнительным свойствам. Например, дополнение MetaMask можно определить через оценку определения свойства window.ethereum (если дополнение не установлено, "typeof window.ethereum" вернёт значение "undefined").

  1. Главная ссылка к новости
  2. OpenNews: Техника идентификации смартфонов по широковещательной активности Bluetooth
  3. OpenNews: Идентификация через анализ внешних обработчиков протоколов в браузере
  4. OpenNews: Метод идентификации браузера через манипуляции с кэшированием Favicon
  5. OpenNews: Сопротивление внедрению API FLoC, продвигаемого Google вместо отслеживающих Cookie
  6. OpenNews: 0.77% крупнейших сайтов используют Canvas для скрытой идентификации посетителей
Обсуждение (53 +6) | Тип: Проблемы безопасности |


·01.06 В NPM включена обязательная двухфакторная аутентификация для 500 самых популярных пакетов (68)
  В репозитории NPM включено применение обязательной двухфакторной аутентификации для учётных записей сопровождающих 500 самых популярных NPM-пакетов. В качестве критерия популярности использовано число зависимых пакетов. Сопровождающие попавших в список пакетов смогут выполнить связанные с внесением изменений операции с репозиторием только после включения двухфакторной аутентификации, требующей подтверждения входа при помощи одноразовых паролей (TOTP), генерируемых такими приложениями, как Authy, Google Authenticator и FreeOTP, или аппаратных ключей и биометрических сканеров, поддерживающих протокол WebAuth.

Это третий этап усиления защиты NPM от компрометации учётных записей. На первом этапе был выполнен перевод всех учётных записей NPM, для которых не включена двухфакторная аутентификация, на использование расширенной верификации учётных записей, которая требует ввода одноразового кода, отправляемого на email при попытке входа на сайт npmjs.com или выполнения аутентифицируемой операции в утилите npm. На втором этапе обязательная двухфакторная аутентификация была включена для 100 самых популярных пакетов.

Напомним, что в соответствии с проведённым в 2020 году исследованием, лишь 9.27% мэйнтенеров пакетов использовали для защиты доступа двухфакторную аутентификацию, а в 13.37% случаев при регистрации новых учётных записей разработчики пытались повторно использовать скомпрометированные пароли, фигурирующие в известных утечках паролей. В ходе проверки надёжности используемых паролей удалось получить доступ к 12% аккаунтов в NPM (13% пакетов) из-за использования предсказуемых и тривиальных паролей, таких как "123456". В числе проблемных оказались 4 учётные записи пользователей из Top20 самых популярных пакетов, 13 учётных записей, пакеты которых загружали более 50 млн раз в месяц, 40 - более 10 млн загрузок в месяц и 282 с более 1 млн загрузок в месяц. С учётом загрузки модулей по цепочке зависимостей, компрометация ненадёжных учётных записей могла поразить в сумме до 52% от всех модулей в NPM.

  1. Главная ссылка к новости
  2. OpenNews: GitHub раскрыл данные о взломе инфраструктуры NPM и выявлении открытых паролей в логах
  3. OpenNews: GitHub перейдёт на использование обязательной двухфакторной аутентификации
  4. OpenNews: GitHub обновил правила, касающиеся торговых санкций
  5. OpenNews: GitHub внедряет в NPM обязательную расширенную верификацию учётных записей
  6. OpenNews: Уязвимость в репозитории NPM, позволяющая добавить сопровождающего без подтверждения
Обсуждение (68) | Тип: К сведению |


·21.04 Доступна серверная JavaScript-платформа Node.js 18.0 (124 +5)
  Состоялся релиз Node.js 18.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 18.0 отнесён к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Поддержка Node.js 18.x будет осуществляться до апреля 2025 года. Сопровождение прошлой LTS-ветки Node.js 16.x продлится до апреля 2024 года, а позапрошлой LTS-ветки 14.x до апреля 2023 года. Сопровождение LTS-ветки 12.x будет прекращено 30 апреля, а промежуточной ветки Node.js 17.x - 1 июня.

Основные улучшения:

  • Движок V8 обновлён до версии 10.1, применяемой в Chromium 101. По сравнению с выпуском Node.js 17.9.0 появилась поддержка таких возможностей, как методы findLast и findLastIndex для поиска элементов относительно конца массива и функции Intl.supportedValuesOf. Улучшен API Intl.Locale. Ускорена инициализация полей классов и приватных методов.
  • Включён по умолчанию экспериментальный API fetch(), предназначенный для загрузки ресурсов по сети. Реализация основана на коде из HTTP/1.1 клиента undici и максимально приближена к аналогичному API, предоставляемому в браузерах. В том числе обеспечена поддержка интерфейсов FormData, Headers, Request и Response для манипуляции HTTP-заголовками запросов и ответов.
    
       const res = await fetch('https://nodejs.org/api/documentation.json');
       if (res.ok) {
         const data = await res.json();
         console.log(data);
       }
    
  • Добавлена экпериментальная реализация API Web Streams, предоставляющего доступ к потокам данных, полученным по сети. API даёт возможность добавить свои обработчики для работы с данными по мере поступления информации по сети, не дожидаясь загрузки всего файла. В Node.js теперь доступны такие объекты, как ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream и DecompressionStream.
  • В число стабильных переведён API Blob, который позволяет инкапсулировать неизменяемые сырые данные для их безопасного использования в разных рабочих потоках.
  • В число стабильных переведён API BroadcastChannel, позволяющий организовать обмен сообщениями в асинхронном режиме в формате "один отправитель - много получателей".
  • Добавлен экспериментальный модуль node:test для создания и запуска тестов на языке JavaScript, возвращающих результат в формате TAP (Test Anything Protocol).
  • Обеспечено формирование готовых сборок для Red Hat Enterprise Linux (RHEL) 8 и других дистрибутивов на базе Glibc 2.28+, включая Debian 10 и Ubuntu 20.04, а также для macOS 10.15+. Из-за проблем со сборкой движка V8 временно прекращено формирование 32-разрядных сборок для Windows.
  • Предоставлена экспериментальная возможность сборки исполняемого файла Node.js с выбранными пользователем компонентами, инициализируемыми при запуске. Для определения стартовых компонентов в сборочный скрипт configure добавлена опция "--node-snapshot-main", например, "./configure --node-snapshot-main=marked.js; name node"



Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры.

Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core).

По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных.

  1. Главная ссылка к новости
  2. OpenNews: Выпуск серверной JavaScript-платформы Node.js 17.0
  3. OpenNews: Уязвимость в http2-модуле из состава Node.js
  4. OpenNews: Автор Node.js представил защищённую JavaScript-платформу Deno 1.0
  5. OpenNews: Проект Deno развивает защищённую JavaScript-платформу, похожую на Node.js
  6. OpenNews: Выпуск сервера приложений NGINX Unit 1.5 с поддержкой Node.js
Обсуждение (124 +5) | Тип: Программы |


·20.04 Доступен предварительный вариант стандарта WebAssembly 2.0 (60 +6)
  Консорциум W3C опубликовал черновой вариант новой спецификации, стандартизирующей промежуточный код WebAssembly 2.0 и связанный с ним API, позволяющий создавать высокопроизводительные приложения, переносимые между браузерами и аппаратными платформами. WebAssembly предоставляет не зависящий от браузера универсальный низкоуровневый промежуточный код для выполнения приложений, скомпилированных из различных языков программирования. Благодаря задействованию JIT для WebAssembly можно добиться уровня производительности близкого к нативному коду.

Технология WebAssembly может применяться для выполнения в браузере задач, требующих высокой производительности, например, кодирования видео, обработки звука, манипуляции с графикой и 3D, разработки игр, криптографических операций и математических вычислений через организацию выполнения в браузере кода, написанного на компилируемых языках, таких как C/C++.

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

W3C опубликовал три предварительные спецификации WebAssembly 2.0:

  • WebAssembly Core - описывает низкоуровневую виртуальную машину для выполнения промежуточного кода WebAssembly. Связанные с WebAssembly ресурсы поставляются в формате ".wasm", схожем с файлами ".class" в Java и содержащем статические данные и сегменты кода для работы с этими данными.
  • WebAssembly JavaScript Interface - предоставляет API для интеграции с JavaScript. Позволяет получать значения и передавать параметры в функции WebAssembly. Выполнение WebAssembly соответствует модели безопасности JavaScript и всё взаимодействие с основной системой производится по аналогии с выполнением JavaScript-кода.
  • WebAssembly Web API - определяет программный интерфейс на основе механизма Promise для запроса и выполнения ресурсов ".wasm". Формат ресурсов WebAssembly оптимизирован для начала выполнения, не дожидаясь полной загрузки файла, что позволяет повысить отзывчивость web-приложений.

Основные изменения в WebAssembly 2.0, по сравнению с первой версией стандарта:

  • Поддержка векторного типа v128 и связанных с ним векторных инструкций, позволяющих параллельно выполнять действия над несколькими числовыми значениями (SIMD, single instruction multiple data).
  • Возможность импорта и экспорта изменяемых (mutable) глобальных переменных, позволяющих применять глобальное связывание для таких значений, как указатели стека в C++.
  • Новые инструкции для преобразования типа float в int, которые вместо генерации исключения при переполнении результата возвращают минимально или максимально возможное значение (необходимо для SIMD).
  • Инструкции для расширения знака целых чисел (увеличение разрядности числа с сохранением знака и значения).
  • Поддержка возвращения нескольких значений блоками и функциями (в дополнение к передаче в функции нескольких параметров).
  • Реализация JavaScript-функций BigInt64Array и BigUint64Array для преобразования между JavaScript-типом BigInt и представлением 64-разрядных целых чисел в WebAssembly.
  • Поддержка ссылочных типов (funcref и externref) и связанных с ними инструкций (select, ref.null, ref.func и ref.is_null).
  • Инструкции memory.copy, memory.fill, memory.init и data.drop для копирования данных между областями памяти и очистки регионов памяти.
  • Инструкции для прямого доступа и изменения таблиц (table.set, table.get, table.size, table.grow). Возможность создания, импорта и экспорта нескольких таблиц в одном модуле. Функции копирования/заполнения таблиц в пакетном режиме (table.copy, table.init и elem.drop).

  1. Главная ссылка к новости
  2. OpenNews: Доступен Wasmer 2.0, инструментарий для создания приложений на базе WebAssembly
  3. OpenNews: Доступен Emscripten 3.0, компилятор из C/C++ в WebAssembly
  4. OpenNews: Вариант LibreOffice, скомпилированный в WebAssembly и работающий в web-браузере
  5. OpenNews: Первый выпуск wasm3, быстрого интерпретатора WebAssembly
  6. OpenNews: W3C придал WebAssembly статус рекомендованного стандарта
Обсуждение (60 +6) | Тип: К сведению |


·14.04 Facebook открыл код Lexical, библиотеки для создания редакторов текста (59 –11)
  Компания Facebook (запрещена в РФ) открыла исходные тексты JavaScript-библиотеки Lexical, предлагающей компоненты для создания текстовых редакторов и продвинутых web-форм редактирования текста для сайтов и web-приложений. Из отличительных качеств библиотеки выделяется простота интеграции на сайты, компактное исполнение, модульность и поддержка средств для людей с ограниченными возможностями, таких как экранные ридеры. Код написан на языке JavaScript и распространяется под лицензией MIT. Для ознакомления с возможностями библиотеки подготовлено несколько интерактивных демонстраций.

Библиотека рассчитана на простоту подключения и не зависит от внешних web-фрейворков, но при этом предоставляет готовые привязки для упрощения интеграции с фреймворком React. Для использования Lexical достаточно привязать экземпляр редактора к редактируемому элементу, после чего в процессе редактирования можно контролировать состояние редактора через обработку событий и команд. Библиотека позволяет отслеживать состояния редактора в любой момент времени и отражать в DOM изменения на основании вычисления различий между состояниями.

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

Базовый каркас библиотеки содержит минимально необходимый набор компонентов, функциональность которого расширяется через подключение плагинов. Например, через плагины можно подключить дополнительные элементы интерфейса, панели, средства для визуального редактирования в режиме WYSIWYG, поддержку формата markdown или компоненты для работы с отдельными видами контента, такими как списки и таблицы. В форме плагинов также доступны такие функции как автодополнение ввода, ограничение на максимальный размер вводимых данных, открытие и сохранение файлов, прикрепление примечаний/комментариев, голосовой ввод и т.п.

  1. Главная ссылка к новости
  2. OpenNews: В рамках проекта Sandstorm развивается платформа для персональных web-серверов
  3. OpenNews: Ice.js - система наглядного отслеживания изменений в web-формах
  4. OpenNews: Представлен ProseMirror 1.0, тулкит для создания визуальных редакторов для Web
  5. OpenNews: Релиз встраиваемого в web-приложения редактора кода ACE Editor 1.0
  6. OpenNews: Facebook открыл Draft.js, библиотеку для построения web-редакторов
Обсуждение (59 –11) | Тип: Программы |


·31.03 Развиваемый проектом SerenityOS web-браузер успешно прошёл тесты Acid3 (97 +64)
  Разработчики операционной системы SerenityOS сообщили, что развиваемый проектом web-браузер успешно прошёл тесты Acid3, применяемые для проверки web-браузеров на предмет поддержки web-стандартов. Отмечается, что из новых открытых браузеров, созданных после формирования Acid3, SerenityOS Browser стал первым полностью прошедшим тесты проектом.

Набор тестов Acid3 создан в 2008 году Яном Хиксоном (Ian Hickson), инициатором создания спецификации HTML5 и соавтором спецификаций CSS. Acid3 включает в себя 100 тестов, подготовленных в виде функций, возвращающих положительный или отрицательный результат прохождения теста. Тесты охватывают различные области, такие как ECMAScript, HTML 4.01, DOM Level 2, HTTP/1.1, SVG, XML и т.п. В 2011 году тесты были обновлены, но из-за изменений в современных web-спецификациях современные Chrome и Firefox проходят лишь 97 из 100 тестов Acid3.

SerenityOS Browser написан на языке C++ и распространяется под лицензией BSD. В проекте используется собственный браузерный движок LibWeb и JavaScript-интерпретатор LibJS, вынесенные во внешние библиотеки. Имеется поддержка выполнения промежуточного кода WebAssembly. Для поддержки протоколов HTTP и HTTPS развиваются библиотеки LibHTTP и LibTLS.

Напомним, что проект Serenity развивает Unix-подобную операционную систему для архитектур x86 и x86_64, оснащённую собственным ядром и графическим интерфейсом, оформленным в стиле операционных систем конца 1990-х годов. Разработка ведётся с нуля, ради интереса и не основана на коде существующих ОС. Авторы поставили перед собой цель довести SerenityOS до уровня, пригодного для повседневной работы, сохранив эстетику систем конца 90-х, но дополнив её полезными идеями для опытных пользователей из современных систем.

В ядре SerenityOS заявлена поддержка таких возможностей, как вытесняющая многозадачность, применение аппаратных механизмов защиты (SMEP, SMAP, UMIP, NX, WP, TSD), многопоточность, IPv4 стек, файловая система на основе Ext2, POSIX-сигналы, mmap(), исполняемые файлы в формате ELF, псевдо-ФС /proc, Unix-сокеты, псевдотерминалы, средства профилирования.

Пользовательское окружение составляют композитный и консольный менеджеры (WindowServer, TTYServer), оболочка командной строки, стандартная Си-библиотека (LibC), набор типовых пользовательских утилит и графическое окружение на базе собственного GUI фреймворка (LibGUI, LibGfx, LibGL) и набора виджетов. В набор графических приложений входят почтовый клиент, среда для визуального проектирования интерфейса HackStudio, текстовый редактор, звуковой cинтезатор, файловый менеджер, несколько игр, интерфейс для запуска программ, редактор шрифтов, менеджер загрузки файлов, эмулятор терминала, конфигураторы, PDF-просмотрщик, графический редактор PixelPaint, музыкальный проигрыватель, редактор электронных таблиц, видеопроигрыватель.

  1. Главная ссылка к новости
  2. OpenNews: Обновлённый комплект тестов Acid3 теперь успешно проходят почти все браузеры
  3. OpenNews: Выпуск операционной системы ToaruOS 2.0
  4. OpenNews: Essence - самобытная операционная система со своим ядром и графической оболочкой
  5. OpenNews: Выпуск свободной операционной системы Visopsys 0.9
  6. OpenNews: Проект SerenityOS развивает Unix-подобную ОС c графическим интерфейсом
Обсуждение (97 +64) | Тип: Программы |


·14.03 В язык JavaScript предложено добавить синтаксис с информацией о типах (202 +28)
  Компании Microsoft, Igalia и Bloomberg выступили с инициативой включения в спецификацию JavaScript синтаксиса для явного определения типов, похожего на синтаксис, применяемый в языке TypeScript. В настоящее время прототип изменений, предложенный для включения в стандарт ECMAScript, вынесен для предварительных обсуждений (Stage 0). На ближайшем мартовском заседании комитета TC39 планируется перейти на первую стадию рассмотрения предложения с привлечением экспертного сообщества из ECMA.

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

При этом в отличие от информации о типах, задаваемой при помощи аннотаций JSDoc, указываемых в форме комментариев, прямое указание типов непосредственно в конструкциях определения переменных сделает код более наглядным, понятным и простым для редактирования. Например, интегрированные среды разработки с поддержкой TypeScript смогут сразу подсвечивать ошибки в типизированном JavaScript-коде без дополнительных преобразований. Кроме того, встроенная поддержка типов даст возможность выполнять программы, написанные на типизированных диалектах JavaScript, таких как TypeScript и Flow, без транспиляции из одного языка в другой.

Из типов предлагается добавить "string", "number" и "boolean", которые можно будет использовать при определении переменных, параметров функций, элементов объектов, полей классов, типизированных массивов ("number[]"). Предлагается также обеспечить поддержку объединённых типов ("string | number") и дженериков.


   let x: string;

   function add(a: number, b: number) {
      return a + b;
   }

   interface Person {
       name: string;
       age: number;
   }

   function foo<T>(x: T) {
      return x;
   }

   function foo(x: string | number): string | number {
      if (typeof x === number) {
          return x + 1
      }
      else {
           return x + "!"
      }
   }

  1. Главная ссылка к новости
  2. OpenNews: Предложен компилятор исходных текстов на языке TypeScript в машинный код
  3. OpenNews: Выпуск jsii 1.31, генератора кода C#, Go, Java и Python из TypeScript
  4. OpenNews: Доступен язык TypeScript 2.0, продвигаемый Microsoft в качестве дополнения к JavaScript
  5. OpenNews: Компания Microsoft представила TypeScript, новую открытую альтернативу JavaScript
Обсуждение (202 +28) | Тип: К сведению |


·23.02 В репозитории NPM выявлено 25 вредоносных пакетов (72 +18)
  В репозитории NPM выявлено 25 вредоносных пакетов, которые распространялись с использованием тайпсквоттинга, т.е. с назначением имён, похожих на названия популярных библиотек, с расчётом на то, что пользователь допустит опечатку при наборе имени или не заметит различий, выбирая модуль из списка.
  • 17 пакетов включали вредоносный код для поиска в локальной файловой системе токенов Discord и их отправки на сервер злоумышленников. В большинстве случаев вредоносные изменения камуфлировались через поставку модифицированных вариантов легитимных библиотек discord.js и colors.
    • node-colors-sync
    • color-self
    • color-self-2
    • lemaaa
    • adv-discord-utility
    • tools-for-discord
    • purple-bitch
    • purple-bitchs
    • noblox.js-addons
    • discord-selfbot-tools
    • discord.js-aployscript-v11
    • discord.js-selfbot-aployscript
    • discord.js-selfbot-aployed
    • discord.js-discord-selfbot-v4
    • colors-beta
    • vera.js
    • discord-protection
  • 5 пакетов включали код для отправки содержимого переменных окружения, которые, например, могли включать ключи доступа, токены или пароли к системам непрерывной интеграции или облачным окружениям, таким как AWS.
    • wafer-text
    • wafewafer-templater-countdown
    • wafer-template
    • wafer-darla
    • mynewpkg
  • 2 пакета (markedjs, crypto-standarts) включали троян для организации удалённого доступа к системе пользователя, позволяющий выполнить произвольный код на языке Python (Python remote code injector).
  • 1 пакет (kakakaakaaa11aa) включал бэкдор для удалённого управления системой (Connectback shell).

  1. Главная ссылка к новости
  2. OpenNews: В NPM включена обязательная двухфакторная аутентификация для 100 самых популярных пакетов
  3. OpenNews: Нарушение обратной совместимости в популярном NPM-пакете привело к сбоям в различных проектах
  4. OpenNews: Разработчик внёс деструктивные изменения в NPM-пакеты colors и faker, применяемые в 20 тысячах проектов
  5. OpenNews: В репозитории NPM выявлено 17 вредоносных пакетов
  6. OpenNews: Уязвимость, позволявшая выпустить обновление для любого пакета в репозитории NPM
Обсуждение (72 +18) | Тип: Проблемы безопасности |


·25.01 В Polkit добавлена поддержка JavaScript-движка Duktape (152)
  В инструментарий Polkit, используемый в дистрибутивах для обработки авторизации и определения правил доступа к операциям, требующим повышенных прав доступа (например, монтирования USB-накопителя), добавлен бэкенд, позволяющий использовать встраиваемый JavaScript-движок Duktape вместо ранее применяемого движка Mozilla SpiderMonkey (по умолчанию как и раньше осуществляется сборка с движком Mozilla). Язык JavaScript в Polkit используется для определения правил доступа, которые взаимодействуют с привилегированным фоновым процессом polkitd при помощи объекта "polkit".

Duktape используется в браузере NetSurf и отличается компактным размером, высокой переносимостью и низким потреблением ресурсов (код занимает около 160 kB, а для выполнения достаточно 64kB ОЗУ). Обеспечивается полная совместимость со спецификациями Ecmascript 5.1 и частичная поддержка Ecmascript 2015 и 2016 (ES6 и ES7). Также предоставляются специфичные расширения, такие как поддержка сопрограмм, встроенный фреймворк для журналирования, механизм загрузки модулей на основе CommonJS, система кэширования байткода, позволяющая сохранять и загружать скомпилированные функции. В состав входит встроенный отладчик, движок для выполнения регулярных выражений и подсистема для поддержки Unicode.

  1. Главная ссылка к новости
  2. OpenNews: Уязвимость в Polkit, позволяющая повысить свои привилегии в системе
  3. OpenNews: В KDE обеспечена интеграция с PolKit
  4. OpenNews: Выпуск web-браузера NetSurf 3.10
  5. OpenNews: Выпуск встраиваемого JavaScript-движка Duktape 2.4.0
Обсуждение (152) | Тип: Программы |


·16.01 Нарушение обратной совместимости в популярном NPM-пакете привело к сбоям в различных проектах (99 +17)
  В репозитории NPM наблюдается очередной массовый сбой в работе проектов из-за возникновения проблем в новой версии одной из популярных зависимостей. Источником проблем стал новый выпуск пакета mini-css-extract-plugin 2.5.0, предназначенного для извлечения CSS в отдельные файлы. Пакет насчитывает более 10 млн еженедельных загрузок и используется в качестве прямой зависимости у более чем 7 тысяч проектов.

В новой версии были внесены изменения, нарушающие обратную совместимость при импорте библиотеки и приводившие к выводу ошибки при попытке использования ранее допустимой и описанной в документации конструкции "const MiniCssExtractPlugin = require('mini-css-extract-plugin')", которую при переходе на новую версию потребовалось заменить на "const MiniCssExtractPlugin = require("mini-css-extract-plugin").default".

Проблема проявилась в проектах, не применяющих явную привязку к номеру версии при подключении зависимостей. В качестве обходного пути решения проблемы рекомендовано зафиксировать привязку к прошлой версии 2.4.5 через добавление '"overrides": {"mini-css-extract-plugin": "2.4.5"}' в Yarn или использовав команду "npm i -D --save-exact mini-css-extract-plugin@2.4.5" в NPM.

В числе пострадавших оказались пользователи развиваемого компанией Facebook пакета create-react-app, подключающего mini-css-extract-plugin в качестве зависимости. Из-за отсутствия привязки к номеру версии mini-css-extract-plugin попытки запуска create-react-app завершались выводом ошибки "TypeError: MiniCssExtractPlugin is not a constructor". Проблема также затронула пакеты @wordpress/scripts, @auth0/auth0-spa-js, sql-formatter-gui, LedgerSMB, vip-go-mu-plugins, cybros, vue-cli, chore и т.д.

  1. Главная ссылка к новости
  2. OpenNews: Разработчик внёс деструктивные изменения в NPM-пакеты colors и faker, применяемые в 20 тысячах проектов
  3. OpenNews: Уязвимость, позволявшая выпустить обновление для любого пакета в репозитории NPM
  4. OpenNews: В NPM-пакеты coa и rc, насчитывающие 9 и 14 млн загрузок в неделю, внедрено вредоносное ПО
  5. OpenNews: Незащищённость NPM к атакам по внедрению вредоносных модулей-червей
  6. OpenNews: Атака на зависимости позволила выполнить код на серверах PayPal, Micrоsoft, Apple, Netflix, Uber и ещё 30 компаний
Обсуждение (99 +17) | Тип: Тема для размышления |


·10.01 Разработчик внёс деструктивные изменения в NPM-пакеты colors и faker, применяемые в 20 тысячах проектов (309 +85)
  Марак Сквайрс (Marak Squires), автор популярных пакетов colors (расцветка консоли node.js) и faker (генератор фиктивных данных для полей ввода), насчитывающих 2.8 и 25 млн еженедельных загрузок, разместил в репозитории NPM и на GitHub новые версии своих продуктов, включающие деструктивные изменения, целенаправленно приводящие к сбоям на стадии сборки и выполнения зависимых проектов. В результате действий Марака была нарушена работа многих проектов, включая AWS CDK, использующих указанные библиотеки - библиотека colors используется в качестве зависимости у 18953 проектов, а faker - у 2571.

В код библиотеки "colors" был добавлен вывод в консоль текста "LIBERTY LIBERTY LIBERTY" и бесконечный цикл, блокирующий работу зависимых проектов и выводящий поток из искажённых слов "tesing". В библиотеке faker удалено содержимое репозитория, в коммите "endgame" добавлены файлы .gitignore и .npmignore для исключения файлов проекта, а вместо содержимого файла README размещён вопрос "Что на самом деле случилось с Аароном Шварцем". Проблемы присутствуют в версиях colors 1.4.1+ и faker 6.6.6.

В ответ на совершённые действия GitHub заблокировал доступ Марака к своим репозиториям (90 публичных + несколько приватных), а NPM откатил проблемную версию пакета. При этом законность действий GitHub вызывает вопросы, так как удаление разработчиком кода из одного из своих репозиториев не может рассматриваться как нарушение правил сервиса. Более того, в тексте лицензии на пакеты colors и faker явно обозначено отсутствие любых гарантий и обязательств в отношении работоспособности кода.

Интересно, что первое предупреждение о прекращении разработки было опубликовано больше года назад. В сентябре 2020 года Марак потерял всё имущество из-за пожара, после чего в начале ноября в ультимативной форме призвал коммерческие компании, использующие его проекты, финансировать продолжение разработки, иначе он обещал прекратить сопровождение, так как не намерен больше работать бесплатно. До инцидента последняя версия colors была выпущена два года назад, а faker - 9 месяцев назад.

Что касается мотивов внесения в пакеты деструктивных изменений, то вероятно Марак пытается дать урок корпорациям, пользующимся трудами сообщества разработчиков свободного ПО, но ничего не возвращающим взамен, или привлечь внимание к переосмыслению обстоятельств смерти Аарона Шварца. Аарон покончил жизнь самоубийством после возбуждённого против него уголовного дела, связанного с копированием научных статей из платной базы данных JSTOR, отстаивая идею предоставления свободного доступа к научным публикациям. Аарону были предъявлены обвинения в компьютерном мошенничестве и незаконном получении информации с защищённого компьютера, максимальный срок наказания по которым составлял 50 лет лишения свободы и штраф в миллион долларов (в случае заключения судебного соглашения и признания обвинений Аарону предстояло отсидеть в тюрьме 6 месяцев).

Считается, что Аарон на фоне депрессии не выдержал давления судебной системы и несправедливости выдвигаемых обвинений (ему грозило 50 лет тюрьмы лишь за то, что он скачал содержимое базы данных научных статей, которые по его мнению должны распространяться без ограничения). Марак Сквайрс в опубликованном вместо удалённого кода вопросе о смерти Аарона и в публикации в Twitter-е намекает на неподтверждённую теорию заговора, в соответствии с которой Аарон Шварц нашёл в архиве MIT какие-то документы, порочащие определённых важных лиц, и его за это убили, замаскировав происшествие под самоубийство (завтра исполнится 9 лет как Аарон ушёл из жизни).

  1. Главная ссылка к новости
  2. OpenNews: Уязвимость, позволявшая выпустить обновление для любого пакета в репозитории NPM
  3. OpenNews: В NPM-пакеты coa и rc, насчитывающие 9 и 14 млн загрузок в неделю, внедрено вредоносное ПО
  4. OpenNews: Инцидент с захватом прав на NPM-модуль привёл к сбою в работе проектов, использующих NPM
  5. OpenNews: Уязвимость в NPM-пакете node-netmask, применяемом в 270 тысячах проектов
  6. OpenNews: Незащищённость NPM к атакам по внедрению вредоносных модулей-червей
Обсуждение (309 +85) | Тип: Тема для размышления |


·09.12 В репозитории NPM выявлено 17 вредоносных пакетов (42 +10)
  В репозитории NPM выявлено 17 вредоносных пакетов, которые распространялись с использованием тайпсквоттинга, т.е. с назначением имён, похожих на названия популярных библиотек, с расчётом на то, что пользователь допустит опечатку при наборе имени или не заметит различий, выбирая модуль из списка.

Пакеты discord-selfbot-v14, discord-lofy, discordsystem и discord-vilao использовали модифицированный вариант легитимной библиотеки discord.js, предоставляющей функции для взаимодействия с API Discord. Вредоносные компоненты были интегрированы в один из файлов пакета и включали около 4000 строк кода, запутанного с использованием искажения имён переменных, шифрования строк и нарушения форматирования кода. Код сканировал локальную ФС на предмет токенов Discord и в случае выявления отправлял их на сервер злоумышленников.

Пакет fix-error был заявлен как исправляющий ошибки в Discord selfbot, но включал троянское приложение PirateStealer, осуществляющее кражу номеров кредитных карт и учётных записей, связанных с Discord. Вредоносный компонент активировался через подстановку JavaScript-кода в клиент Discord.

Пакет prerequests-xcode включал троян для организации удалённого доступа к системе пользователя, основанный на Python-приложении DiscordRAT.

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

Пакеты wafer-bind, wafer-autocomplete, wafer-beacon, wafer-caas, wafer-toggle, wafer-geolocation, wafer-image, wafer-form, wafer-lightbox, octavius-public и mrg-message-broker включали код для отправки содержимого переменных окружения, которые, например, могли включать ключи доступа, токены или пароли к системам непрерывной интеграции или облачным окружениям, таким как AWS.

  1. Главная ссылка к новости
  2. OpenNews: GitHub внедряет в NPM обязательную расширенную верификацию учётных записей
  3. OpenNews: Уязвимость, позволявшая выпустить обновление для любого пакета в репозитории NPM
  4. OpenNews: В NPM-пакеты coa и rc, насчитывающие 9 и 14 млн загрузок в неделю, внедрено вредоносное ПО
  5. OpenNews: В NPM-пакет UAParser.js, насчитывающий 8 млн загрузок в неделю, внедрено вредоносное ПО
  6. OpenNews: Уязвимость в NPM, приводящая к перезаписи файлов в системе
Обсуждение (42 +10) | Тип: Проблемы безопасности |


<< Предыдущая страница (позже)
Следующая страница (раньше) >>



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

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