Требует действийможет затронуть работающую систему
TTunnelLocal переходит на аутентифицированный AES-GCM с раздельными ключами
TTunnelLocal получает новую security-схему: AES-CTR заменён аутентифицированными кадрами AES-GCM, ключи приёма и передачи разделены, session включена в authentication, а повреждённые handshakes отклоняются раньше. Также исправлены associated data в OpenSSL GCM, утечка binary cookie и разбор __Secure- cookies после пробела. Для Delphi 2010 отключён небезопасный inline.
Коротко
- Используйте build 2.4.17551: за security rewrite TTunnelLocal сразу следуют три hardening fixes.
- Шифрованный трафик TTunnelLocal теперь использует AES-GCM, authenticated frames и разные ключи приёма/передачи.
- Код с tlmVersion1 нужно перевести на tlmVersion1_aesctr или новый tlmVersion2.
- TAesGcmOsl теперь корректно аутентифицирует AEAD associated information.
- TBinaryCookieGenerator больше не теряет managed state при уничтожении после invalidation.
Рекомендации по обновлению
Переходите на build 2.4.17551, а не на 2.4.17544-2.4.17545, где новый tunnel protocol ещё не получил все hardening fixes. Обновите оба конца TTunnelLocal одновременно, замените tlmVersion1 и проверьте encrypted handshakes, отказ неверных tags и повреждённые metadata. Пользователям OpenSSL GCM нужны AAD vectors, а binary cookie — циклы invalidate/destroy.
10 из 10 записей · 11 коммитов в апстриме
1
Критический
Кадры TTunnelLocal получают authenticated encryption и directional keys
TTunnelLocalMagic переименовывает tlmVersion1 в tlmVersion1_aesctr и добавляет tlmVersion2. Активный protocol меняет AES-CTR на AES-GCM, выводит разные receive/send keys из handshake CRC сторон, аутентифицирует TTunnelSession как AAD, увеличивает 96-bit IV по направлениям и отвергает одинаковые CRC или keys.
Безопасность
mormot.crypt.core+1
a9f6b586+105-32
net: fixed TTunnelLocal handshake security
Влияние
Encrypted tunnel frames теперь дают integrity и confidentiality и не используют один key в обоих направлениях. Protocol identifiers и wire framing изменены, поэтому смешанные old/new endpoints несовместимы.
Требуется миграция
Обновите оба peer TTunnelLocal одновременно. Найдите tlmVersion1 и замените нужные legacy-ссылки на tlmVersion1_aesctr; для authenticated protocol используйте tlmVersion2.
Публичный API
TTunnelLocalMagic.tlmVersion1renamed — Legacy значение AES-CTR теперь называется tlmVersion1_aesctr.TTunnelLocalMagic.tlmVersion2added — Обозначает authenticated AES-GCM tunnel protocol.
2
Высокий
Ошибки аутентификации tunnel очищают plaintext и handshake secrets
TTunnelLocal очищает decrypted output при ошибке GCM tag, добавляет доменную метку Handshake в SHAKE-128 signatures, проверяет длину metadata до pointer access и обнуляет receive/send keys после OpenInternal. Encryption сохраняет выделенный result при exception финализации.
Безопасность
mormot.net.tunnel
beeed494+14-8
net: enhanced TTunnelLocal security
Влияние
Отклонённые encrypted frames больше не оставляют unauthenticated plaintext в памяти, а handshake signatures отделены от других применений SHAKE-128. Это прямой hardening нового протокола.
Рекомендуется обновиться
Используйте этот hardening commit или новее и проверьте, что изменённый GCM tag закрывает tunnel без выдачи plaintext.
Модули
3
Высокий
Tunnel metadata проверяются до parsing и затем очищаются
TTunnelLocal.OpenInternal проверяет наличие SizeOf(loc) байтов до извлечения JSON metadata. После InitJsonInPlace вызов FillZero(info) стирает расшифрованную копию.
Безопасность
mormot.net.tunnel
c08ef0d6+6-7
net: minor TTunnelLocal handshake refactoring
Влияние
Повреждённые handshakes отклоняются до parsing metadata, а sensitive tunnel information меньше остаётся в памяти. Application API не меняется.
Рекомендуется обновиться
Применяйте этот follow-up вместе с tunnel protocol rewrite и проверьте отказ усечённых metadata frames.
Модули
4
Высокий
Длина metadata tunnel handshake больше не вызывает underflow указателя
TTunnelLocal.OpenInternal вычитает заявленную длину JSON metadata из остатка frame, отвергает отрицательный результат и только затем создаёт RawByteString view. Ранее pointer формировался до проверки.
Безопасность
mormot.net.tunnel
c7e0e055+6-4
net: hardened TTunnel handshake
Влияние
Повреждённый remote handshake больше не может направить metadata parsing перед началом принятого frame; peer завершается с ETunnel.
Рекомендуется обновиться
Обновите оба tunnel peer и добавьте в handshake tests слишком малые и большие длины JSON metadata.
Модули
5
Высокий
OpenSSL GCM сохраняет IV при обработке associated data
TAesOsl.UpdEvp получает optional KeepIV. TAesGcmOsl включает его для payload и AAD, чтобы не копировать EVP_CIPHER_CTX_iv обратно в Owner.IV во время GCM round, и пропускает AAD нулевой длины.
Исправления
mormot.crypt.openssl
c9ed0cb9+14-19
crypt: fixed TAesGcmOsl with AEAD associated information
Влияние
TAesGcmOsl теперь корректно аутентифицирует associated information без повреждения IV state. AEAD output OpenSSL должен совпадать с pure implementation на тех же vectors.
Рекомендуется обновиться
Обновите все использования TAesGcmOsl с AesGcmAad и повторите known-answer tests для ciphertext и tags.
Публичный API
TAesOsl.UpdEvpsignature-changed — Добавлен optional boolean KeepIV со значением false по умолчанию.
Модули
6
Высокий
Уничтожение binary cookie освобождает managed state контекста
TBinaryCookieGenerator.Destroy заменяет FillCharFast для fContext на FillZeroRtti(TypeInfo(TBinaryCookieContext), fContext). Regression test инвалидирует cookie, проверяет пустое состояние и уничтожает generator.
Исправления
mormot.crypt.secure
69b16d3f+13-3
crypt: fixed #650 binary cookie generator memory leak
Влияние
Managed fields в TBinaryCookieContext финализируются перед anti-forensic zeroing, что устраняет удержание памяти при destroy после invalidation cookie.
Рекомендуется обновиться
Обновите сервисы, создающие и освобождающие TBinaryCookieGenerator, особенно после invalidation одноразовых cookies.
Модули
7
Средний
Cookies __Secure- после пробела разбираются под логическим именем
THttpCookies.ParseServer и CookieFromHeaders вызывают GotoNextNotSpace перед проверкой префикса __Secure- каждой пары. Тест покрывает prefixed cookie после другого значения, точки с запятой и пробела.
Исправления
mormot.core.text
95a8e9d0+8-2
net: fixed #649 cookie parsing
Влияние
Cookie headers с обычным разделителем «точка с запятой + пробел» теперь находят __Secure- значения под ожидаемым именем без префикса.
Рекомендуется обновиться
Обновите HTTP-код, читающий __Secure- cookies из multi-cookie headers, и повторите lookup tests.
Модули
8
Средний
AES-GCM получает public helper инкремента 96-bit nonce
mormot.crypt.core добавляет GCM_IncIV, увеличивающий байты 0..11 TAesBlock в big-endian порядке и не меняющий 32-bit counter suffix. GMAC_SIZE выражен как SizeOf(THash128), документация AES-GCM уточняет layout buffers.
Новые возможности
mormot.crypt.core
54b070e6+24-3
crypt: new GCM_IncIV() wrapper function
Влияние
Cryptographic callers могут увеличивать 96-bit GCM nonce без изменения block counter. Existing API и ciphertext format не меняются без использования helper.
Публичный API
GCM_IncIVadded — Увеличивает 96-bit AES-GCM nonce в TAesBlock.
Модули
9
Средний
Delphi 2010 избегает небезопасного inline в core paths
HASSAFEINLINE теперь начинается с Delphi XE, а не Delphi 2010. Ряд string, lock, HTTP и ORM methods используют его, поэтому Delphi 2010 компилирует их без inline, а новые Delphi и FPC сохраняют прежний путь.
Компилятор и платформы
mormot.core.base+4
86119552+15-16
core: circumvent Delphi 2010 inlining bug
Влияние
Сборки Delphi 2010 обходят compiler inlining defect в часто используемых routines. Другие компиляторы сохраняют поведение и API.
Рекомендуется обновиться
Пересоберите Delphi 2010 targets и проверьте string conversion, locks, HTTP compression и ORM JSON paths.
10
Низкий
Доступ к заголовкам строк упрощён без изменения поведения
mormot.core.base единообразно именует PStrRec переменные sr и использует decrement pointer для string headers в EnsureRawUtf8 и FakeCodePage. TLdapClientSettings.SetTargetUri убирает нормализацию, уже выполненную URI parser.
Внутреннее устройство
mormot.core.base+1
b59d0bf0+51-46
core: some refactoring with no functional change
Влияние
Ожидаемых изменений application code или runtime behavior нет. Это внутренний cleanup string allocation и LDAP target parsing.