После года разработки опубликован значительный выпуск языка программирования Python 3.12. Новая ветка будет поддерживаться в течение полутора лет, после чего ещё три с половиной года для неё будут формироваться исправления с устранением уязвимостей.
Одновременно началось альфа-тестирование ветки Python 3.13, в которой появился режим сборки CPython без глобальной блокировки интерпретатора (GIL, Global Interpreter Lock). Ветка Python 3.13 будет находиться на стадии альфа-выпусков в течение семи месяцев, во время которых будут добавляться новые возможности и производиться исправление ошибок (в соответствии с новым графиком разработки работа над новой веткой начинается за пять месяцев до релиза предыдущей ветки и к моменту очередного релиза достигает стадии альфа-тестирования). После этого в течение трёх месяцев будет проводиться тестирование бета-версий, во время которого добавление новых возможностей будет запрещено и всё внимание будет уделяться исправлению ошибок. Последние два месяца перед релизом ветка будет находиться на стадии кандидата в релизы, на которой будет выполнена финальная стабилизация.
Повышена гибкость разбора f-строк (форматируемые литералы с префиксом 'f'), позволившая избавиться от многих ограничений. Например, внутри f-строк теперь можно указывать любые допустимые для Python выражения, включая многострочные выражения, комментарии, обратные слэши и escape-последовательности для Unicode. Кроме того, во внутренней строке теперь допускается повторное использование тех же кавычек, что и в обрамлении f-строки (т.е. внутри теперь повторно можно использовать двойные кавычки, не переходя на одинарные). Повышена информативность сообщений об ошибках в f-строках, в которых теперь указывается точное место в строке, вызвавшее ошибку.
Например в Python 3.12 допускаются следующие конструкции:
print(f"This is the playlist: {"\n".join(songs)}")
print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}")
print(f"This is the playlist: {", ".join([
... 'Take me back to Eden', # My, my, those eyes like fire
... 'Alkaline', # Not acid nor alkaline
... 'Ascensionism' # Take to the broken skies at last
... ])}")
Для повышения эффективности использования ресурсов многоядерных систем реализована поддержка изолированных субинтерпретаторов и отдельных глобальных блокировок (GIL, Global Interpreter Lock) для разных интерпретаторов внутри процесса (CPython позволяет в одном процессе выполнять запускать сразу несколько интерпретаторов). В текущем виде возможность пока доступна только через C-API (в Python API поддержка появится в следующей значительной ветке).
В Python-коде добавлена возможность использования протокола
buffer. Классы, предоставляющие метод "__buffer__()", теперь могут использоваться как типы, напрямую работающие с бинарными данными в памяти.
Предложен модуль sys.monitoring для отладки и профилирования, позволяющий с минимальными накладными расходами отслеживать такие события в CPython, как вызовы, возвраты из функций, выполнение произвольных строк кода, исключения и переходы.
В интерпретаторе реализована поддержка подсистемы ядра Linux perf, позволяющая определять имена Python-функций при профилировании при помощи утилиты perf (ранее в трассировках определялись только имена Си-функций).
Повышена информативность сообщений об ошибках и расширен спектр исключений, предлагающих рекомендации по устранению опечаток. Например, теперь выводятся рекомендации по импорту забытых модулей стандартной библиотеки, показываются подсказки по добавлению префикса "self." в методах, определяется написание "import x from y" вместо "from y import x" и т.п.
sys.version_info
NameError: name 'sys' is not defined. Did you forget to import 'sys'?
somethin = blech
NameError: name 'blech' is not defined. Did you mean: 'self.blech'?
import a.y.z from b.y.z
SyntaxError: Did you mean to use 'from ... import ...' instead?
from collections import chainmap
ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?
Продолжена работа по оптимизации производительности. Суммарный прирост производительности в результате добавленных оптимизаций оценивается в 5%.
В процесс сборки добавлена экспериментальная поддержка бинарного оптимизатора BOLT, повышающего производительность на 1-5%.
Реализовано inline-развёртывание списковых включений (comprehensions), до двух раз ускоряющее работу со списковыми включениями (для кода, в котором активно используются списковые включения, тестирование показало общий прирост производительности на 11%).
На 8-16 байт уменьшен размер Unicode-объектов.
Ускорены операции с регулярными выражениями re.sub(), re.subn() и re.Pattern.
От 2 до 20 раз ускорено выполнение проверок isinstance() для некоторых протоколов.
Значительно повышена производительность пакета asyncio (в некоторых тестах наблюдается ускорение на 75%).
Ускорено создание класса asyncio.Task.
Значительно (в некоторых тестах на 64%) ускорены функции tokenize.tokenize() и tokenize.generate_tokens().
Ускорена загрузка атрибутов и вызов метода super().
Предложен новый более компактный синтаксис аннотирования типов для обобщённых классов и функций.
Предоставлен новый способ определения псевдонимов типов при помощи выражения "type"
type Point = tuple[float, float]
type Point[T] = tuple[T, T]
В модуль typing добавлен новый декоратор @override, информирующий системы проверки типов о том, что метод в подклассе предназначен для переопределения метода или атрибута в суперклассе. Декоратор может использоваться для выявления ошибок, связанных с тем, что предназначенный для переопределения метод не выполняет данное действие.
class Base:
def log_status(self) -> None:
...
class Sub(Base):
@override
def log_status(self) -> None: # Ok, переопределяет Base.log_status
...
@override
def done(self) -> None: # Система проверки типов выявит ошибку
...
С целью усиления безопасности встроенные реализации алгоритмов SHA1, SHA3, SHA2-384, SHA2-512 и MD5 в hashlib заменены на формально верифицированные варианты от проекта HACL* (встроенные реализации применяются только если отсутствует OpenSSL).
В СPython реализована защита от переполнения стека.
В классе pathlib.Path реализована поддержка подклассов.
В модуле os расширена поддержка платформы Windows. Например, при работе в Windows добавлена поддержка методов os.listdrives(), os.listvolumes() и os.listmounts(), а также повышена точность os.stat() и os.lstat().
В модули sqlite3 и uuid добавлены интерфейсы командной строки ("python -m sqlite3" и "python -m uuid").
В C-API добавлена поддержка "бессмертных" объектов, для которых не применяется подсчёт ссылок.
Реализована концепция нестабильного уровня C API, предназначенного для использования в отладчиках, JIT-компиляторах и прочих низкоуровневых инструментах.
Проведена чистка устаревших возможностей.
Удалены модули asynchat, asyncore, smtpd, imp и distutils (модуль distutils можно использовать из пакета setuptools).
Из Си-реализации unicode-объектов удалены свойства wstr и wstr_length.
Удалены устаревшие методы в модуле unittest.
Удалены устаревшие или нормально неработающие функции, классы и методы, включая locale.format(), io.OpenWrapper, ssl.RAND_pseudo_bytes(), ElementTree.Element.copy(), hashlib.pbkdf2_hmac(), gzip.GzipFile и т.д.
В модуле webbrowser прекращена поддержка старых браузеров, среди которых Grail, Mosaic, Netscape, Galeon, Skipstone, Iceape, Firebird, и Firefox до версии 36.
В рамках подготовки к внесению будущих оптимизаций изменено внутреннее представление целых чисел.
Представлен выпуск дистрибутива Rhino Linux 2023.3, реализующего вариант Ubuntu с моделью непрерывной доставки обновлений, позволяющий получить доступ к наиболее свежим версиям программ. Новые версии в основном переносятся из devel-веток репозиториев Ubuntu, в которых производится сборка пакетов с новыми версиями приложений, синхронизированных с Debian Sid и Unstable. Компоненты рабочего стола, ядро Linux, загрузочные заставки, темы оформления, браузер Firefox и развиваемые проектом утилиты распространяются через отдельный репозиторий Pacstall. Установочные образы, которые могут загружаться в Live-режиме, подготовлены для архитектур x86_64 (2 ГБ) и ARM64 (1.9 ГБ), а также для ARM-устройств PineTab, PineTab2, PinePhone и Raspberry Pi.
Управление пакетами осуществляется при помощи собственного пакетного менеджера rhino-pkg (rpk), реализующего обвязку над пакетными менеджерами APT, Pacstall, flatpak и snap. Rhino-pkg позволяет использовать одну универсальную утилиту для выполнения типовых операций с различными форматами пакетов, например, осуществлять установку, удаление, обновление и поиск пакетов. Для сборки дистрибутива применяется инструментарий LiveBuild от проекта Debian с модификациями, заимствованными из VanillaOS. Для установки дистрибутива задействован инсталлятор Calamares.
Для организации графического интерфейса задействовано собственное пользовательское окружение Unicorn, представляющее собой переработанный вариант Xfce, приближенный по стилю к GNOME, но остающийся легковесным. В Unicorn разработчики попытались совместить более современное оформление с традиционным подходом к построению рабочего стола. В качестве боковой панели приложений применяется
Plank Dock, а в качестве верхней панели - штатная панель Xfce. Для навигации по установленным приложениям задействован режим App Grid, реализованный на базе Lightpad.
Навигация по открытым окнам и виртуальным рабочим столам организована при помощи пакета Xfdashboard, реализующего для Xfce интерфейс переключения между приложениями в стиле GNOME Shell и macOS Expose. Для быстрого запуска приложений предлагается uLauncher, предоставляющий поисковую строку для запуска команд, просмотра содержимого каталогов, поиска программ и файлов. Проектом также развиваются мастер первой настройки, приложение для обмена файлами между разными устройствами (ответвление от Snapdrop) и приложение для просмотра информации о системе и обновления дистрибутива.
В новой версии рабочий стол Unicorn переведён на использование унифицированного глобального меню. Ускорен запуск приложения uLauncher. В панели реализован эффект увеличения размера пиктограмм при наведении курсора. В мастере первой настройки решена проблема с запросом пароля для перезагрузки. Улучшено оформление инсталлятора Calamares. В базовую поставку включена система резервного копирования timeshift, использующая rsync с установкой жёстких ссылок или снапшоты Btrfs для реализации функциональности, похожей на System Restore в Windows и Time Machine в macOS. Обновлены версии ядра Linux: 6.5.5 - в общих сборках, 6.6.0-rc3 - в сборках для Pine64 и 6.5.0 - в сборках для Raspberry Pi.
После полутора лет разработки опубликован выпуск проекта VeraCrypt 1.26, развивающего форк системы шифрования дисковых разделов TrueCrypt, прекратившей своё существование. VeraCrypt примечателен заменой используемого в TrueCrypt алгоритма RIPEMD-160 на SHA-512 и SHA-256, увеличением числа итераций хэширования, упрощением процесса сборки для Linux и macOS, устранением проблем, выявленных в процессе аудита исходных текстов TrueCrypt. Прошлый официальный релиз VeraCrypt 1.25.9 был опубликован в феврале 2022 года. Разработанный проектом VeraCrypt код распространяется под лицензией Apache 2.0, а заимствования из TrueCrypt продолжают поставляться под лицензией TrueCrypt License 3.0. Готовые сборки формируются для Linux, FreeBSD, Windows и macOS.
Среди изменений в новой версии:
Добавлена поддержка использования банковских смарт-карт, соответствующих стандарту EMV, в качестве хранилища ключей для доступа к несистемным разделам. EMV-карты могут использоваться в VeraCrypt без необходимости отдельной настройки модуля PKCS#11 и без ввода PIN-кода. Содержимое файла с ключами генерируется на основе уникальных данных, присутствующих на карте.
Удалён режим совместимости с TrueCrypt. Последней версией с поддержкой монтирования или преобразования разделов TrueCrypt является VeraCrypt 1.25.9.
Полностью удалена поддержка алгоритмов шифрования RIPEMD160 и GOST89. Созданные с использованием данных алгоритмов разделы больше не могут быть примонтированы при помощи VeraCrypt.
Для стандартных и системных шифрованных разделов реализована возможность использования нового алгоритма генерации псевдослучайных последовательностей (PRF, Pseudo-Random Function), использующего хэш-функцию BLAKE2s.
Изменения в версии для Linux:
Улучшена совместимость с дистрибутивом Alpine Linux и стандартной Си-библиотекой musl.
Решены проблемы с совместимостью с Ubuntu 23.04 и wxWidgets 3.1.6+.
Версия фреймворка wxWidgets в статических сборках обновлена до 3.2.2.1.
Реализация генератора псевдослучайных чисел приведена к соответствию официальной документации и приближена по поведению к реализации для Windows.
Устранена ошибка в генераторе псевдослучайных чисел, приводящая к сбою выполнения тестов при использовании алгоритма Blake2s.
Решены проблемы с запуском утилиты fsck.
Решена проблема с выбором неверного размера для скрытых разделов при использования режима задействования всего свободного места на диске.
Устранён сбой при создании скрытых разделов через интерфейс командной строки.
Исправлены ошибки в текстовом режиме работы интерфейса. Запрещён выбор ФС exFAT и BTRFS, если они не совместимы с создаваемыми разделами.
Налажена совместимость с классическими инсталляторами старых дистрибутивов Linux.
Реализована рекомендация по добавлению дополнительной проверки, исключающей совпадение первичного и вторичного ключей при создании разделов. Из-за использования при формировании ключей генератора псевдослучайных чисел совпадение ключей маловероятно и проверка добавлена скорее для полного исключения гипотетических атак.
В сборках для платформы Windows включён по умолчанию режим защиты памяти, запрещающий чтение содержимого памяти VeraCrypt процессами, не имеющими привилегий администратора (может нарушить совместимость с экранными ридерами). Добавлена защита от подстановки кода в память VeraCrypt другими процессами. Улучшена реализация шифрования памяти и режима быстрого создания файловых контейнеров. В EFI Bootloader улучшена поддержка оригинального загрузчика Windows в режиме восстановления после сбоя. В меню добавлена опция для монтирования без использования кэша. Решены проблемы с нарастающим замедлением шифрования по месту (Encrypt-In-Place) в крупных разделах. В Expander добавлена поддержка перемещения файлов и ключей в режиме drag&drop. Задействован более современных диалог выбора файлов и каталогов, лучше сочетающийся с Windows 11. Улучшен режим безопасной загрузки DLL.
Прекращена поддержка старых версий Windows. В качестве минимально поддерживаемой версии заявлена Windows 10. Теоретически VeraCrypt всё ещё может запускаться в Windows 7 и Windows 8/8.1, но тестирование корректности работы на данных платформах больше не проводится.
Для управления окнами в Budgie используется оконный менеджер Budgie Window Manager (BWM), являющийся расширенной модификацией базового плагина Mutter. Основу Budgie составляет панель, близкая по организации работы к классическим панелям рабочего стола. Все элементы панели являются апплетами, что позволяет гибко настраивать состав, менять размещение и заменять реализации основных элементов панели на свой вкус. Среди доступных апплетов можно отметить классическое меню приложений, систему переключения задач, область со списком открытых окон, просмотр виртуальных рабочих столов, индикатор управления питанием, апплет управления уровнем громкости, индикатор состояния системы и часы.
Основные изменения:
Изменена настройка тёмной темы оформления. Вместо переключателя "Dark Theme", активирующего тёмную тему оформления рабочего стола, но не влияющего на оформление приложений, предложена универсальная настройка "Dark Style Preference", которую могут учитывать приложения при выборе цветовой схемы. Например, предложенный параметр уже учитывается в программе для редактирования фотографий для выставления тёмного стиля.
Добавлена настройка для масштабирования пиктограмм в системном лотке в зависимости от размера панели (по умолчанию автомасштабирование теперь отключено). В системном лотке также улучшена поддержка API StatusNotifierItem и решены проблемы в апплетах NetworkManager и TeamViewer.
Добавлена поддержка ключевых слов при поиске в меню приложений и диалоге запуска программ, что позволяет, например, указывать ключевые слова "browser", "editor", "performance" для отображения соответствующих приложений.
Улучшена система вывода уведомлений. Упрощена логика образования и извлечения групп уведомлений в панели Raven. Cнижено потребление памяти благодаря переходу на использование дочерних элементов GtkListBox вместо использования хэша привязки групп к именам приложений. Улучшена отрисовка пиктограмм в уведомлениях.
Система порталов Freedesktop (xdg-desktop-portal), применяемых для улучшения совместимости с неродными для текущего пользовательского окружения приложениями и организации доступа к ресурсам пользовательского окружения из изолированных приложений, переведена на использование портала GTK. Изменение решило проблемы с приложениями, поставляемыми в формате flatpak, возникающие при использовании компонентов xdg-desktop-portal 1.18.0+, таких как FileChooser.
CVE-2023-39191 - уязвимость в подсистеме eBPF, дающая возможность локальному пользователю повысить свои привилегии и выполнить код на уровне ядра Linux. Уязвимость вызвана некорректной проверкой eBPF-программ, передаваемых пользователем для выполнения. Для проведения атаки пользователь должен иметь возможность загрузки своей BPF-программы (если параметр kernel.unprivileged_bpf_disabled выставлен в значение 0, например, как в Ubuntu 20.04). Сведения об уязвимости переданы разработчикам ядра ещё в декабре прошлого года, а исправление без лишней огласки внесено в январе.
CVE-2023-42753 - ошибка при работе с индексами массивов в реализации ipset в подсистеме ядра netfilter, которая может использоваться для инкремента/декремента указателей и создания условий для записи или чтения в область памяти за пределами выделенного буфера. Для проверки наличия уязвимости подготовлен прототип эксплоита, вызывающий аварийное завершение (не исключены более опасные сценарии эксплуатации). Исправление включено в состав выпусков ядра 5.4.257,
6.5.3,
6.4.16,
6.1.53,
5.10.195,
5.15.132.
CVE-2023-39192, CVE-2023-39193, CVE-2023-39193 - несколько уязвимостей в ядре Linux, приводящих к утечке содержимого памяти ядра из-за возможности чтения из областей вне выделенного буфера в функциях match_flags и u32_match_it подсистемы Netfilter, а также в коде обработки фильтров состояния. Уязвимости устранены в августе (1, 2) и июне.
CVE-2023-42755 - уязвимость, позволяющая непривилегированному локальному пользователю вызвать крах ядра из-за ошибки при работе с указателями в классификаторе трафика rsvp. Проблема проявляется в LTS-ядрах 6.1, 5.15, 5.10, 5.4, 4.19 и 4.14. Подготовлен прототип эксплоита. Исправление пока не принято в состав ядра и доступно в виде патча.
CVE-2023-42756 - состояние гонки в подсистеме ядра NetFilter, которое можно использовать для вызова локальным пользователем состояния Panic. Доступен прототип эксплоита, работающий как минимум в ядрах 6.5.rc7, 6.1 и 5.10. Исправление пока не принято в состав ядра и доступно в виде патча.
CVE-2023-4527 - переполнение стека в библиотеке Glibc, возникающее в функции getaddrinfo при обработке DNS-ответа, размером более 2048 байт. Уязвимость может привести к утечке данных из стека или аварийному завершению. Уязвимость проявляется только версиях Glibc новее 2.36 при использовании опции "no-aaaa" в /etc/resolv.conf.
CVE-2023-40474, CVE-2023-40475 - уязвимости в мультимедийном фреймворке GStreamer, вызванные целочисленным переполнением в обработчиках файлов с видео в формате MXF. Уязвимости могут привести к выполнению кода атакующего при обработке специально оформленных MXF-файлов в приложении, использующем GStreamer. Проблема устранена в пакете gst-plugins-bad 1.22.6.
CVE-2023-40476 - переполнение буфера в предлагаемом в GStreamer обработчике видео в формате H.265, позволяющее организовать выполнение кода при обработке специально оформленного видео. Уязвимость устранена в пакете gst-plugins-bad 1.22.6.
Разбор - разбор эксплоита, использующего уязвимость CVE-2023-36664 в пакете Ghostscript для выполнения своего кода при открытии специально оформленных документов в формате PostScript. Проблема вызвананекорректной обработкой имён файлов, начинающихся с символа "|" или префикса %pipe%. Уязвимость устранена в выпуске Ghostscript 10.01.2.
CVE-2023-3341, CVE-2023-4236 - уязвимости в DNS-сервере BIND 9, приводящие к аварийному завершению процесса named при обработке специально оформленных управляющих сообщений (достаточно доступа к TCP-порту, через который выполняется управление named (по умолчанию открыт только для loopback-интерфейса), знания ключа RNDC не требуется) или создания определённой высокой нагрузки в режиме DNS-over-TLS. Уязвимости устранены в выпусках BIND 9.16.44, 9.18.19 и 9.19.17.
CVE-2023-4504 - уязвимость в сервере печати CUPS и библиотеке libppd, приводящая к переполнению буфера при разборе специально оформленных документов в формате Postscript. Не исключена эксплуатация уязвимости для организации выполнения своего кода в системе. Проблема устранена в выпусках CUPS 2.4.7 (патч) и libppd 2.0.0 (патч).
После четырёх лет разработки представлен релиз утилиты auto-cpufreq 2.0, предназначенной для автоматической оптимизации скорости работы CPU и энергопотребления в системе. Утилита отслеживает состояние аккумулятора ноутбука, нагрузки на CPU, температуры CPU и активности в системе, и в зависимости от ситуации и выбранных опций динамически активирует режимы энергосбережения или высокой производительности. Поддерживается работа на устройствах с процессорами Intel, AMD и ARM. Код утилиты написан на языке Python и распространяется под лицензией LGPLv3.
Auto-cpufreq может использоваться для автоматического продления времени автономной работы ноутбуков без постоянного урезания каких-то возможностей. В отличие от утилиты TLP, auto-cpufreq не только позволяет выставлять экономные режимы энергопотребления при автономной работе устройства, но и временно включать режим высокой производительности (turbo boost) при выявлении повышения нагрузки на систему.
Основные возможности:
Мониторинг
Основная информация о системе.
Частота CPU (общая и для каждого ядра).
Нагрузка на CPU (общая и для каждого ядра).
Температура CPU (общая и для каждого ядра).
Состояние заряда аккумулятора.
Нагрузка на систему.
Регулирование частоты и режимов энергопотребления CPU в зависимости от:
Заряда аккумулятора.
Нагрузки на CPU.
Температуры CPU с учётом нагрузки (для исключения перегрева).
Нагрузки на систему.
Автоматическая оптимизация производительности CPU и энергопотребления.
Новая ветка примечательна реализацией графического интерфейса на базе библиотеки GTK, помимо ранее доступного интерфейса командной строки. Добавлена поддержка пакетного менеджера Nix и дистрибутива NixOS. Добавлены инструкции для systemd-boot. Расширено число опрашиваемых датчиков.
Опубликован выпуск SBCL 2.3.9 (Steel Bank Common Lisp), свободной реализации языка программирования Common Lisp. Код проекта написан на языках Common Lisp и Си, и распространяется под лицензией BSD.
В новом выпуске:
Выделение стека через DYNAMIC-EXTENT теперь применяется не только к начальной привязке, но и ко всем значениям, которые может принимать переменная (например, через SETQ). Это позволяет, например, упростить построение сложных или рекурсивных структур в стеке через итерации.
Некоторые интерфейсы в модуле SB-POSIX приведены к соответствию спецификации и результат NULL от Си-библиотеки считается ошибкой тогда и только тогда, когда errno будет изменён вызовом. В этом случае будет порождён сигнал SYSCALL-ERROR.
Улучшена работа макросов DO-PASSWDS и DO-GROUPS в модуле SB-POSIX. Эти макросы предназначены для безопасной работы с базой данных паролей и групп.
Восстановлена поддержка платформ Darwin x86 и PowerPC (благодарим Кирилла А. Коринского, Сергея Фёдорова и barracuda156).
Исправлена неправильная компиляция, происходившая вследствие ошибочного вывода типа при умножении значений fixnum на дробные значения.
Исправлена ошибка компилятора, возникающая в некоторых случаях при проверке знаковых и беззнаковых 64-битных значений.
Исправлена ошибка компилятора в случае, когда аргумент ":INITIAL-CONTENTS" для MAKE-ARRAY является константой-не-последовательностью.
Исправлена ошибка компилирования функций свёртки в константу заданной последовательности при возврате ложного значения от функций ":TEST" или ":KEY".
Исправлена ошибка компиляции функций массива или последовательностей с аргументами, подразумевающих очень большие размеры последовательности.
Исправлена ошибка компилятора, возникающая в случае, когда не используется значение, возвращаемое от ADJUST-ARRAY.
Оптимизирован вывод типов функций компилятором, которые могут распространяться назад (propagated backwards) через промежуточное представление.
Улучшен вывод типов для LDB, LOGBITP и RATIO.
Внесены оптимизации, связанные с исключением лишних проверок границ для многих случаев транзитивных сравнений.
Компания Canonical объявила о временной приостановке использования в Snap Store автоматической системы проверки публикуемых пакетов из-за появления в репозитории пакетов с вредоносным кодом для кражи криптовалюты у пользователей. При этом непонятно, ограничивается ли инцидент публикацией вредоносных пакетов сторонними авторами или имеют место какие-то проблемы с безопасностью непосредственно репозитория, так как ситуация в официальном анонсе характеризуется как "потенциальный инцидент с безопасностью".
Подробности об инциденте обещают раскрыть после окончания разбирательства. На время разбирательства работа сервиса переведена в режим ручного рецензирования, при котором все регистрации новых snap-пакетов будет проходить ручную проверку перед публикацией. Изменение не затронет загрузку и публикацию обновлений для уже существующих snap-пакетов.
Проблемывыявлены в пакетах ledgerlive, ledger1, trezor-wallet и electrum-wallet2, опубликованных злоумышленниками под видом официальных пакетов от разработчиков отмеченных криптокошельков, но на деле не имеющих к ним никакого отношения. В настоящее время проблемные snap-пакеты уже удалены из репозитория и больше не доступны для поиска и установки при помощи утилиты snap. Инциденты с загрузкой вредоносных пакетов в Snap Store случались и ранее, например, в 2018 году в Snap Store были выявлены пакеты, включающие скрытый код для майнинга криптовалюты.
Хьюберт Карио (Hubert Kario), чешский исследователь безопасности, работающий в компании Red Hat, представил на завершившемся вчера Европейском симпозиуме по компьютерной безопасности технику атаки Marvin, позволяющую определить исходные данные через измерение задержек при выполнении операций расшифровки на базе алгоритма RSA. На практике предложенный метод позволяет расшифровать трафик или сформировать цифровые подписи без знания закрытого RSA-ключа. Для тестирования применимости атаки опубликован специальный скрипт для проверки TLS-серверов и инструментарий для выявления проблем в библиотеках.
Атака представляет собой вариацию метода Блейхенбахера, предложенного в 1998 году, и продолжает развитие атак ROBOT (Return Of Bleichenbacher's Oracle Threat) и New CAT (New Cache ATtack), опубликованных в 2017 и 2019 годах. Суть метода в том, что атакующий на основании разной реакции сервера и разного времени выполнения операций может отделить корректные и некорректные блоки добавочного заполнения (padding oracle), добавленные в соответствии со стандартом PKCS #1 v1.5 для выравнивания зашифрованных данных по границе блока. Манипулируя информацией о корректности блоков добавочного заполнения атакующий может путём перебора воссоздать подходящий шифротекст.
При этом атака непосредственно не восстанавливает закрытый ключ, а только позволяет расшифровать шифротекст или сформировать поддельное подписанное сообщение. Для успешного проведения атаки требуется отправка очень большого объёма пробных сообщений для расшифровки. Отличие метода Marvin сводится к усовершенствованию техники разделения корректных и некорректных добавочных данных, фильтрации ложных срабатываний, более точному определению задержек при вычислениях и задействованию дополнительных сторонних каналов при измерении.
Применение атаки против TLS-серверов, использующих шифрование на основе ключей RSA, даёт возможность атакующему пассивно сохранить перехваченный трафик и позднее расшифровать его. Для серверов, поддерживающих PFS (Perfect forward secrecy), проведение атаки значительно усложняется и успех зависит от того, как быстро будет проведена атака. Кроме того, метод позволяет сформировать фиктивную цифровую подпись, заверяющую содержимое сообщений ServerKeyExchange в TLS 1.2 или CertificateVerify в TLS 1.3, передаваемых на этапе обмена ключами, что может применяться для совершения MITM-атак по перехвату TLS-соединения между клиентом и сервером.
Проведение MITM-атак существенно усложняется из-за того, что цифровые подписи охватывают не только передаваемые данные, но и случайное значение, выбранное клиентом, а также из-за необходимости подделки подписи за относительно небольшое время, до того как клиент закроет соединение после истечения таймаута (для оптимизации подбора предлагается параллельно отправлять большое число проверочных запросов).
Проблема затрагивает различные реализации протоколов в которых применяется RSA и PKCS #1 v1.5, такие как TLS, XML Encryption, интерфейсы PKCS#11, JWT (JSON Web Token), JOSE (Javascript Object Signing and Encryption) и S/MIME. Несмотря на то, что в современных криптографических библиотеках присутствует та или иная защита от атак на базе метода Блейхенбахера, в ходе проведённого исследования было выявлено, что в библиотеках остаются незакрытые каналы утечки и не обеспечено постоянное время обработки пакетов с корректным и ошибочным добавочным заполнением. Например, реализация атаки Marvin на GnuTLS не привязывается к коду, непосредственно выполняющего вычисления, связанные с RSA, а использует разное время выполнения кода, который принимает решение о выводе того или иного сообщения об ошибке.
Возможность совершения атаки Marvin выявлена в реализациях TLS, предлагаемых в библиотеках:
OpenSSL (CVE-2022-4304). Уязвимость вызвана утечкой информации в коде дешифровки RSA. Проблема устранена в февральских обновлениях OpenSSL (3.0.8 и 1.1.1t).
GnuTLS (CVE-2023-0361). Уязвимость вызвана различием времени ответа при обработке шифротекста RSA в сообщении ClientKeyExchange с корректным и некорректным добавочным заполнением PKCS#1 v1.5. Проблема устранена в февральском выпуске GnuTLS 3.8.0.
Mozilla NSS (CVE-2023-4421). Выявлены проблемы, связанные с непостоянным временем выполнения некоторых операций RSA в зависимости от обрабатываемых данных. Частично уязвимость устранена в выпуске 3.61. Дополнительные исправления ожидаются в выпуске NSS 3.94, который намечен на следующую неделю.
OpenSSL-ibmca. Исправления, решающие проблемы с непостоянным временем обработки добавочного заполнения RSA PKCS#1 v1.5 и OAEP, добавлены в мартовский выпуск 2.4.0.
Кроме того, в библиотеке GNU MP (функция mpz_powm_sec) и Go-модуле crypto/rsa (функция DecryptPKCS1v15SessionKey) выявлены уязвимые вызовы API, приводящие к утечкам, которые можно использовать для совершения атак, анализирующих зависимость скорости выполнения операций от обрабатываемых данных (timing attacks). Из протестированных проектов, которые не подвержены атаке, отмечена библиотека BoringSSL.
Так как атака основана на фундаментальной уязвимости в операциях расшифровки на базе RSA с добавочным заполнением, соответствующим стандарту PKCS#1 v1.5, и за 25 лет существования проблемы в библиотеках так и не обеспечили постоянное время обработки пакетов с корректным и ошибочным добавочным заполнением, в качестве оптимального решения предлагается прекратить использование RSA на TLS-серверах в пользу шифров на основе ECDH (Elliptic Curve Diffie Hellman).
Автор исследования также полагает, что рассмотренный класс уязвимостей не ограничивается RSA и может затрагивать многие другие криптографические алгоритмы, зависящие от типовых библиотек для целочисленных вычислений, например, использующих BIGNUM из OpenSSL, MPI из из NSS, Java BigInteger, Python int, Rust apint, GnuMP mpz_t, Go math/big Int и т.п. В качестве примера потенциальной применимости метода приводится атака Minerva на реализации алгоритма создания цифровой подписи ECDSA/EdDSA.
Для подтверждения возможности совершения атаки Marvin на практике исследователь продемонстрировал применимость метода к приложениям на базе библиотек M2Crypto и pyca/cryptography, для компрометации шифрования в которых оказалось достаточно нескольких часов при проведении эксперимента на среднем ноутбуке. Например, в экспериментах с библиотекой M2Crypto на ноутбуке Lenovo T480 с CPU Intel i7-8650U атака по дешифровке шифротекста при использовании 1024-разрядных ключей RSA заняла 9 часов и потребовала отправки 163 тысячи проверочных запросов.
Организация практических атак на TLS-серверы по сети требует более сложных манипуляций, сильно зависящих от размеров ключей, модели CPU на системе жертвы, особенностей конфигурации оборудования, операционной системы, применяемой реализации RSA и расстояния между сервером к атакующим (для учёта сетевых задержек). В наиболее оптимальном варианте проведение целевой сетевой атаки на систему жертвы, подключённую через один сетевой коммутатор с атакующим, потребует нескольких дней при использовании на стороне жертвы OpenSSL и нескольких часов, при использовании NSS.
Состоялся экспериментальный выпуск открытой реализации WinAPI - Wine 8.17. С момента выпуска версии 8.16 было закрыто 19 отчётов об ошибках и внесено 287 изменений.
Наиболее важные изменения:
Продолжено развитие функциональности, нацеленной на реализацию возможности использования Wine в окружениях на базе протокола Wayland без применения XWayland и компонентов X11. В драйвер winewayland.drv добавлена начальная поддержка управления окнами.
В API DirectMusic добавлена поддержка коллекций, инструментов и образцов звуков в формате SoundFont.
Встроенный пакет vkd3d с реализацией Direct3D 12, работающей через трансляцию вызовов в графический API Vulkan, обновлён до версии
1.9.
Закрыты отчёты об ошибках, связанные с работой приложений: MeGUI, Sumatra PDF 3.0, Cemu 1.12.0, ToneX, Finale 27, SoftEther VPN Server Manage, Metatrader 4.
Закрыты отчёты об ошибках, связанные с работой игр The Elder Scrolls: Oblivion, RageMP, Dwarf Fortress, ReCore, а также игр компании SRPG Studio.
Дополнительно можно упомянуть формирование выпуска проекта Wine Staging 8.17, формирующего расширенные сборки Wine, включающие не полностью готовые или рискованные патчи, пока непригодные для принятия в основную ветку Wine. По сравнению с Wine в Wine Staging предоставляется 494 дополнительных патча.
В новом выпуске Wine Staging осуществлена синхронизация с кодовой базой Wine 8.17. В основной состав Wine перемещён патч с реализацией базовой функциональности systeminfo. Добавлен патч с начальной реализацией метода D3DXLoadMeshHierarchyFromXInMemory, возвращающего заглушку с ID3DXAnimationController. Обновлены патчи vkd3d-latest и user32-recursive-activation.
Опубликован выпуск СУБД DuckDB 0.9.0, сочетающей такие свойства SQLite, как компактность, возможность подключения в форме встраиваемой библиотеки, хранение БД в одном файле и удобный CLI-интерфейс, со средствами и оптимизациями для выполнения аналитических запросов, охватывающих значительную часть хранимых данных, например, выполняющих агрегирование всего содержимого таблиц или слияние нескольких больших таблиц. Код проекта распространяется под лицензией MIT. Разработка пока находится на стадии формирования экспериментальных выпусков, так как формат хранилища пока не стабилизирован и меняется от версии к версии.
В DuckDB предоставляется расширенный диалект языка SQL, включающий дополнительные возможности для обработки очень сложных и длительно выполняемых запросов. Поддерживается использование сложных типов (массивы, структуры, объединения) и возможность выполнения произвольных и вложенных коррелирующих подзапросов. Поддерживается одновременное выполнение нескольких запросов, выполнение запросов напрямую из файлов в формате CSV и Parquet. Имеется возможность импорта из СУБД PostgreSQL.
Помимо кода оболочки из SQLite проектом используется вынесенный в отдельную библиотеку парсер из PostgreSQL, компонент Date Math из MonetDB, своя реализация оконных функций (на базе алгоритма Segment Tree Aggregation), обработчик регулярных выражений на основе библиотеки RE2, собственные оптимизатор запросов, MVCC-механизм управления одновременным выполнением заданий (Multi-Version Concurrency Control), а также векторизированный движок выполнения запросов на базе алгоритма Hyper-Pipelining Query Execution, позволяющий в одной операции разом обрабатывать большие наборы значений.
Среди изменений в новом выпуске:
Значительно повышена производительность агрегирования больших наборов данных при обработке запросов с выражениями "GROUP BY" или "DISTINCT", а также реализована техника вытеснения части хэш-таблицы на диск, решающая проблему с завершением операции из-за нехватки памяти в ситуациях, когда используемая для агрегирования хэш-таблица не умещается в оперативную память. Например, время обработки запроса "SELECT COUNT(*) FROM (SELECT DISTINCT * FROM tbl);" для набора в 30 млн строк при наличии 10ГБ памяти снизилась с 8.52 до 2.91 секунд.
Реализована возможность сжатия строковых и целочисленных данных перед выполнением операций сортировки и сгруппированного агрегирования, которая позволила значительно снизить потребление памяти (например, перед сортировкой значения упаковываются в объединённые строки, подобные "alice005, bob00003, eve00003, mallory7).
Повышена производительность оконных функций. По сравнению с прошлым выпуском время выполнения теста оконных функций снизилось с 33.8 до 3.8 сек.
Обеспечена автоматическая чистка полных групп строк при выполнении операции DELETE. Также реализовано усечение файла с БД (уменьшение его размера) после удаления данных, если удалённые группы строк находились в конце файла.
Повышена эффективность хранения индексов ART, используемых для проверки первичного и внешнего ключей или уникальности. Например, по сравнению с прошлой версией размер тестового индекса уменьшился с 278MB до 78MB.
Добавлена поддержка автоматической установки и загрузки официальных дополнений, которые помечены как заслуживающие доверия. Например, для использования дополнения json теперь достаточно написать duckdb.sql("FROM 'https://raw.githubusercontent.com/duckdb/duckdb/main/data/json/example_n.ndjson'").
Добавлена поддержка динамической загрузки дополнений на базе WebAssambly (DuckDB-WASM).
Добавлено дополнение для AWS, предоставляющее возможности, использующие AWS SDK.
Добавлено экспериментальное дополнение для чтения данных из хранилища Azure.
В клиенте добавлена экспериментальная поддержка API PySpark.
Добавлено экспериментальное дополнение для чтения таблиц в формате Apache Iceberg.
Ужесточена проверка правил с автоматическим приведением типов. В случае использования разных имён при определении типа и при указании поля структуры теперь будет выводиться ошибка. Например в таблице, созданной как "СREATE TABLE structs(s STRUCT(i INT));" теперь не получится добавить элемент с другим именем "INSERT INTO structs VALUES ({'k': 42});", так как имена "i" и "k" отличаются.
Компания System76, разрабатывающая Linux-дистрибутив Pop!_OS, опубликовала сентябрьский отчёт о развитии новой редакции пользовательского окружения COSMIC, переписанной на языке Rust (не путать со старым COSMIC, который был основан на GNOME Shell). Окружение развивается как универсальный проект, не привязанный к конкретному дистрибутиву и соответствующий спецификациям Freedesktop. Проектом также разрабатывается композитный сервер cosmic-comp на базе Wayland.
Для построения интерфейса в COSMIC задействована библиотека Iced, которая использует безопасные типы, модульную архитектуру и модель реактивного программирования, а также предлагает архитектуру, привычную для разработчиков, знакомых с языком декларативного построения интерфейсов Elm. Предоставляется несколько движков отрисовки, поддерживающих Vulkan, Metal, DX12, OpenGL 2.1+ и OpenGL ES 2.0+, а также оконная оболочка и движок для интеграции с Web. Приложения на базе Iced могут быть собраны для Windows, macOS, Linux и запуска в web-браузере. Разработчикам предлагается готовый набор виджетов, возможность создавать асинхронные обработчики и использовать адаптивную компоновку элементов интерфейса в зависимости от размера окна и экрана. Код распространяется под лицензией MIT.
Из недавних изменений отмечается реализация режима Window-Swappin для замены окон при использовании мозаичной (тайловой) компоновки. Благодаря функции Auto-tiling позиция для новых окон на экране выбирается автоматически, что не всегда может соответствовать ожиданию пользователя. Окно можно переместить вручную, но это требует выполнения дополнительных манипуляций и отвлекает пользователя. Для упрощения операции перестановки окон предложен режим быстрой замены, позволяющий нажав и удерживая клавиатурную комбинацию "Super + X" (Windows + X) быстро переместить окно дополнительно нажимая клавиши управления курсором.
Добавлены новые виджеты для ввода текста, вставки символов по месту и поисковых запросов. Улучшено использование символьных пиктограмм, таких как увеличительное стекло, размер и цвет которых теперь лучше соответствует контексту и выбранной теме оформления.
Для клавиатуры и мыши реализована поддержка динамических настроек, подразумевающих мгновенное применение изменений после смены настройки в конфигураторе. Добавлены конфигураторы панелей, позволяющие изменить местоположение, прозрачность, оформление и размер основной панели и dock-панели, а также настроить режим автоматического скрытия и определить список апплетов на рабочем столе (wi-fi, заряд аккумулятора, виртуальные рабочие столы, часы и т.п.).
Выполнено профилирование и оптимизация производительности библиотеки Smithay, применяемой в композитном сервере. Добавлена поддержка Wayland-протокола "pointer-gestures" для управления экранными жестами с сенсорных экранов и тачпадов (например, появилась возможность масштабирования щипком).
Код библиотеки iced синхронизирован с версией 0.10. Переработана библиотека для работы с анимацией. Добавлена поддержка Wayland-протокола "security-context" для идентификации клиентов, использующих sandbox-изоляцию. Улучшено размещение панели слева или справа.
В своём выступлении, посвящённом 40-летию проекта GNU, Ричард Столлман признался, что теперь ему приходится бороться с наихудшей из проблем - у него выявили раковую опухоль. У Cтоллмана одна из разновидностей лимфом, подлежащая лечению (Столлман упомянул "к счастью c этим можно справиться").
Компания Red Hat объявила о переводе разработки Red Hat Enterprise Linux и CentOS Stream на новую систему отслеживания ошибок issues.redhat.com, построенную на основе проприетарной платформы Jira, развиваемой компанией Atlassian. Ранее в Red Hat применялась собственная редакция свободной платформы отслеживания ошибок Bugzilla (аналогичные отдельные редакции Bugzilla также поддерживают проекты Mozilla и SUSE). В настоящее время компания Red Hat уже перешла на приём новых сообщений об ошибках в RHEL 6-9 только через новую систему и в течение следующих нескольких недель планирует перенести из Bugzilla в Jira существующую базу сообщений об ошибках. Проект Fedora продолжит использование Bugzilla, несмотря на внедрение Jira в RHEL и CentOS Stream.
Ранее на использование Jira уже был переведён проект OpenShift и теперь настала очередь RHEL. В качестве причины миграции называется желание консолидировать управление всеми проектами в одном месте и использовать Jira в качестве единой платформы для управления всеми аспектами разработки. Также отмечается, что применение Jira позволит расширить возможности по организации совместной работы и повысит гибкость в предоставлении доступа партнёрам и сообществу к разным стадиям процесса разработки своих продуктов. Из достоинств Jira называются расширенные возможности визуализации, интуитивное управление иерархией и наличие REST API.
Недавно проект Bugzilla отметил своё 25-летие и объявил о создании независимой некоммерческой корпорации Zarro Boogs Corporation для дальнейшего курирования разработки, управления интеллектуальной собственностью и организации отдельного приёма пожертвований. Корпорация создана по аналогии с организацией MZLA Technologies Corporation, курирующей разработку почтового клиента Thunderbird, но отличается тем, что Zarro Boogs Corporation является полностью независимой и не привязана к Mozilla Foundation. 15 сентября планировалось сформировать выпуск Bugzilla 5.9.1, который преподносится как первый тестовый выпуск кардинально переработанной ветки Bugzilla 6.
Спустя более четырёх лет с момента создания платы Raspberry Pi 4 организация Raspberry Pi Foundation представила плату нового поколения - Raspberry Pi 5, которая поступит в продажу в конце октября по цене $60 за вариант с 4 ГБ ОЗУ и $80 за вариант с 8 ГБ ОЗУ. Для сравнения плата Raspberry Pi 4 с 2 ГБ ОЗУ продавалась за $35, 4 ГБ ОЗУ - $55, а 8 ГБ ОЗУ - $75, но при этом заявлено, что производительность платы Raspberry Pi 5 в 2-3 раза выше Raspberry Pi 4.
SoC Broadcom BCM2712 2.4GHz на базе 4-ядерного 64-разрядного CPU Arm Cortex-A76. Процессор производится по техпроцессу 16nm, поддерживает расширение для ускорения криптографических операций, оснащён L2-кэшем в 512KB на каждое ядро и общим L3-кэшем в 2 МБ. Чип специально разработан для платы Raspberry Pi 5 и по уровню производительности способен справляться с типовыми нагрузками для рабочих станций. При проектировании платы использовалась концепция чиплетов. Для сравнения плата Raspberry Pi 4 поставлялась с SoC BCM2711 на базе 4-ядерного 64-разрядного CPU Arm Cortex-A72, производимого по техпроцессу 28nm и работающего на частоте 1.5GHz.
GPU VideoCore VII 800MHz c поддержкой графических API OpenGL ES 3.1 и Vulkan 1.2 (в Raspberry Pi 4 поставлялся GPU VideoCore VI).
2 порта Micro HDMI с поддержкой HDR и качества 4Kp60 при одновременном выводе через два порта. Заявлено об изначальной поставке полностью открытых драйверов для Mesa. В Raspberry Pi 4 было два порта Micro HDMI, поддерживающих вывод с качеством 4Kp60 при выводе через один порт и 4Kp30 при выводе через два порта.
Встроенный аппаратный декодировщик для видео в формате HEVC/H.265, поддерживающий декодирование видео с качеством
4Kp60.
4 или 8 ГБ ОЗУ (LPDDR4X-4267 SDRAM). Производительность памяти более чем в два раза выше, чем в Raspberry Pi 4 (4267MT/s против 2000MT/s).
В дальнейшем ожидается версия с 16 ГБ ОЗУ.
Wi-Fi 802.11ac с поддержкой работы на частотах 2.4GHz и 5GHz.
Bluetooth 5.0 / Bluetooth Low Energy (BLE).
Слот microSD с поддержкой высокоскоростного режима SDR104.
Два порта USB 3.0 с пропускной способностью 5Gbps и два порта USB 2.0.
Гигабитный Ethernet с поддержкой PoE (Power over Ethernet).
Два 4-линейных MIPI-трансивера для камеры и экрана (сдвоенный разъём MIPI CSI/DSI).
Один слот PCIe 2.0 (из-за необходимости уместить слот в миниатюрный форм-фактор использован нестандартный разъём).
Питание 5V/5A через USB-C. Из-за возрастания энергопотребления блоки питания от старых плат Raspberry Pi могут не подойти, рекомендуется БП с мощностью 27W. Также рекомендуется использовать корпус с кулером для активного охлаждения.
Типичный для Raspberry Pi 40-пиновый GPIO.
RTC (Real-time clock) с отдельным аккумулятором.
Кнопка включения питания.
Размер платы и форм-фактор не изменился и по-прежнему соответствует
моделям "B" плат Raspberry Pi.
В качестве операционной системы на Raspberry Pi 5 можно будет использовать следующий выпуск Raspberry Pi OS на базе Debian 12, который планируют сформировать в середине октября.