Agir maintenantpeut affecter un système en production
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.
10 sur 10 entrées · 11 commits upstream
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é.
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.
Mise à jour recommandée
Utilisez ce durcissement ou une révision ultérieure et vérifiez qu'un tag GCM modifié ferme le tunnel sans exposer le texte clair.
Unités
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.
Mise à jour recommandée
Prenez ce correctif avec la réécriture du protocole tunnel et testez le rejet des trames de métadonnées tronquées.
Unités
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.
Mise à jour recommandée
Mettez à niveau les deux pairs tunnel et testez des tailles de métadonnées JSON trop petites et trop grandes.
Unités
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.
Mise à jour recommandée
Mettez à niveau tout usage de TAesGcmOsl avec AesGcmAad et relancez les tests connus de texte chiffré et tags.
API publique
TAesOsl.UpdEvpsignature-changed — Ajoute le paramètre boolean optionnel KeepIV, false par défaut.
Unités
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.
Mise à jour recommandée
Mettez à niveau les services qui créent et détruisent des TBinaryCookieGenerator, surtout après invalidation de cookies à usage unique.
Unités
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.
Mise à jour recommandée
Mettez à niveau le code HTTP lisant les cookies __Secure- dans des en-têtes multiples et relancez les tests de recherche.
Unités
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.
Unités
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.
Mise à jour recommandée
Recompilez les cibles Delphi 2010 et testez conversion de chaînes, verrous, compression HTTP et chemins JSON ORM.
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.