mORMot2 DailyLecture quotidienne des commits upstream

TTunnelLocal adopte AES-GCM authentifié avec des clés par direction

TTunnelLocal reçoit une réécriture de sécurité : AES-CTR est remplacé par des trames AES-GCM authentifiées, les clés d'envoi et de réception sont séparées, la session est authentifiée et les handshakes malformés sont rejetés plus tôt. La série corrige aussi les données associées GCM avec OpenSSL, une fuite des cookies binaires et l'analyse des cookies __Secure- précédés d'un espace. Delphi 2010 est protégé contre des inlinings non sûrs.

En bref

  • Utilisez le build 2.4.17551 ; la réécriture de sécurité TTunnelLocal reçoit trois durcissements immédiats.
  • Le trafic chiffré TTunnelLocal utilise AES-GCM avec des trames authentifiées et des clés d'envoi/réception séparées.
  • Le code utilisant tlmVersion1 doit migrer vers tlmVersion1_aesctr ou le nouvel identifiant tlmVersion2.
  • TAesGcmOsl authentifie désormais correctement les données associées AEAD.
  • La destruction de TBinaryCookieGenerator ne fuit plus l'état géré après invalidation.

Conseil de mise à jour

Passez au build 2.4.17551, pas aux builds 2.4.17544-2.4.17545 où le nouveau protocole tunnel n'avait pas encore tous ses durcissements. Mettez à niveau les deux extrémités TTunnelLocal ensemble, migrez les références tlmVersion1 et retestez handshakes chiffrés, tags rejetés et métadonnées malformées. Vérifiez aussi les vecteurs AAD OpenSSL GCM et les cycles d'invalidation/destruction des cookies binaires.

Build2.4.17538 → 2.4.17551
Commits11
Lignes+257 -141
Lecture3 min

10 sur 10 entrées · 11 commits upstream

Sujets
# Entrée Catégorie Unités
1 Critique Les trames TTunnelLocal gagnent chiffrement authentifié et clés directionnelles TTunnelLocalMagic renomme tlmVersion1 en tlmVersion1_aesctr et ajoute tlmVersion2. Le protocole actif passe les trames d'AES-CTR à AES-GCM, dérive des clés de réception et d'envoi distinctes depuis les CRC des deux côtés, authentifie TTunnelSession comme AAD, incrémente un IV 96 bits par direction et rejette CRC ou clés identiques. Sécurité mormot.crypt.core+1 a9f6b586+105-32

net: fixed TTunnelLocal handshake security

Impact

Les trames chiffrées offrent désormais intégrité et confidentialité sans réutiliser une clé dans les deux directions. Les identifiants et le format réseau changent ; des extrémités anciennes et nouvelles ne sont pas compatibles.

Migration nécessaire

Mettez à niveau les deux pairs TTunnelLocal ensemble. Recherchez tlmVersion1 et remplacez les références legacy voulues par tlmVersion1_aesctr ; utilisez tlmVersion2 pour le protocole authentifié.

API publique

  • TTunnelLocalMagic.tlmVersion1renamed — La valeur legacy AES-CTR s'appelle désormais tlmVersion1_aesctr.
  • TTunnelLocalMagic.tlmVersion2added — Identifie le protocole tunnel AES-GCM authentifié.

Arnaud Bouchez · 08:29 UTC · voir le commit sur GitHub →

2 Élevée Les échecs d'authentification tunnel effacent texte clair et secrets TTunnelLocal efface la sortie déchiffrée si le tag GCM échoue, ajoute un label de domaine Handshake aux signatures SHAKE-128, vérifie les tailles avant accès mémoire et efface les clés d'envoi/réception après OpenInternal. Le résultat alloué est conservé si la finalisation lève une erreur. Sécurité mormot.net.tunnel beeed494+14-8

net: enhanced TTunnelLocal security

Impact

Les trames rejetées ne laissent plus de texte clair non authentifié en mémoire et les signatures de handshake sont séparées des autres usages SHAKE-128. Ce sont des durcissements directs du nouveau protocole.

Arnaud Bouchez · 09:00 UTC · voir le commit sur GitHub →

3 Élevée Les métadonnées tunnel sont vérifiées avant analyse puis effacées TTunnelLocal.OpenInternal vérifie que la trame distante contient encore SizeOf(loc) octets avant d'extraire les métadonnées JSON. Après InitJsonInPlace, FillZero(info) efface la copie déchiffrée. Sécurité mormot.net.tunnel c08ef0d6+6-7

net: minor TTunnelLocal handshake refactoring

Impact

Les handshakes malformés échouent avant l'analyse des métadonnées et les informations sensibles restent moins longtemps en mémoire. Pas de changement d'API applicative.

Arnaud Bouchez · 10:15 UTC · voir le commit sur GitHub →

4 Élevée Les métadonnées du handshake tunnel ne peuvent plus faire reculer le pointeur TTunnelLocal.OpenInternal soustrait la taille JSON annoncée de la longueur restante, rejette un résultat négatif puis construit la vue RawByteString. L'ancien code formait le pointeur avant la validation. Sécurité mormot.net.tunnel c7e0e055+6-4

net: hardened TTunnel handshake

Impact

Un handshake distant malformé ne peut plus diriger l'analyse avant le début de la trame reçue. Le pair tunnel échoue avec ETunnel.

Arnaud Bouchez · 08:39 UTC · voir le commit sur GitHub →

5 Élevée OpenSSL GCM conserve son IV pendant le traitement des données associées TAesOsl.UpdEvp reçoit un argument optionnel KeepIV. TAesGcmOsl l'utilise pour les données et l'AAD afin de ne pas recopier EVP_CIPHER_CTX_iv dans Owner.IV pendant un tour GCM, et ignore les AAD de longueur nulle. Correctifs mormot.crypt.openssl c9ed0cb9+14-19

crypt: fixed TAesGcmOsl with AEAD associated information

Impact

TAesGcmOsl peut désormais authentifier correctement les données associées sans corrompre l'état IV. La sortie AEAD OpenSSL doit correspondre à l'implémentation pure pour les mêmes vecteurs.

API publique

  • TAesOsl.UpdEvpsignature-changed — Ajoute le paramètre boolean optionnel KeepIV, false par défaut.

Arnaud Bouchez · 08:21 UTC · voir le commit sur GitHub →

6 Élevée La destruction des cookies binaires libère l'état géré du contexte TBinaryCookieGenerator.Destroy remplace FillCharFast sur fContext par FillZeroRtti(TypeInfo(TBinaryCookieContext), fContext). Le test invalide un cookie généré, vérifie l'état vide puis détruit le générateur. Correctifs mormot.crypt.secure 69b16d3f+13-3

crypt: fixed #650 binary cookie generator memory leak

Impact

Les champs gérés de TBinaryCookieContext sont finalisés avant l'effacement anti-forensique, évitant la mémoire retenue après invalidation puis destruction du générateur.

Arnaud Bouchez · 10:33 UTC · PR #650 · voir le commit sur GitHub →

7 Moyenne Les cookies __Secure- précédés d'un espace retrouvent leur nom logique THttpCookies.ParseServer et CookieFromHeaders appellent GotoNextNotSpace avant de vérifier le préfixe __Secure- de chaque paire. Les tests couvrent un cookie préfixé après un point-virgule et un espace. Correctifs mormot.core.text 95a8e9d0+8-2

net: fixed #649 cookie parsing

Impact

Les en-têtes utilisant le séparateur point-virgule-espace exposent désormais les valeurs __Secure- sous le nom attendu au lieu de les manquer.

Arnaud Bouchez · 10:29 UTC · PR #649 · voir le commit sur GitHub →

8 Moyenne AES-GCM gagne un helper public d'incrément de nonce 96 bits mormot.crypt.core ajoute GCM_IncIV, qui incrémente les octets 0 à 11 de TAesBlock en big-endian sans toucher au suffixe compteur 32 bits. GMAC_SIZE devient SizeOf(THash128) et la documentation AES-GCM précise le format des buffers. Nouveautés mormot.crypt.core 54b070e6+24-3

crypt: new GCM_IncIV() wrapper function

Impact

Les appels cryptographiques peuvent avancer le nonce GCM 96 bits sans modifier le compteur du bloc. Les API et formats existants restent inchangés sauf adoption du helper.

API publique

  • GCM_IncIVadded — Incrémente la partie nonce AES-GCM 96 bits d'un TAesBlock.

Arnaud Bouchez · 08:24 UTC · voir le commit sur GitHub →

9 Moyenne Delphi 2010 évite l'expansion inline non sûre dans les chemins centraux HASSAFEINLINE commence désormais avec Delphi XE plutôt que Delphi 2010. Plusieurs méthodes de chaînes, verrous, HTTP et ORM l'utilisent afin que Delphi 2010 les compile hors ligne tandis que Delphi plus récent et FPC gardent l'inline. Compilateur & plateforme mormot.core.base+4 86119552+15-16

core: circumvent Delphi 2010 inlining bug

Impact

Les builds Delphi 2010 évitent un défaut d'inlining du compilateur dans des routines fréquentes. Les autres compilateurs gardent le même comportement et les mêmes API.

Arnaud Bouchez · 10:14 UTC · voir le commit sur GitHub →

10 Faible L'accès aux en-têtes de chaînes est simplifié sans changer le comportement mormot.core.base nomme uniformément les variables PStrRec sr et utilise un décrément de pointeur pour atteindre les en-têtes dans EnsureRawUtf8 et FakeCodePage. TLdapClientSettings.SetTargetUri retire une normalisation déjà faite par l'analyse URI. Sous le capot mormot.core.base+1 b59d0bf0+51-46

core: some refactoring with no functional change

Impact

Aucun changement prévu pour le code applicatif ou l'exécution. Il s'agit d'un nettoyage interne de l'allocation des chaînes et de l'analyse LDAP.

Arnaud Bouchez · 09:37 UTC · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13