NOTE DI RILASCIO

Le novità di Babel.

Modifiche al motore, agli strumenti di licensing e all’area di lavoro Desktop, dalle note di rilascio del prodotto.

Rilasciata il 11 maggio 2026

Versione 11.7.0.0

Babel Obfuscator

Miglioramenti

  • Modalità CLI adatta all'AI: Nuovo flag globale --format=text|json|ndjson (predefinito text). Con json o ndjson, stdout diventa uno stream strutturato conforme allo schema babel.cli.v1 (versionato, analizzabile da una macchina), mentre la diagnostica destinata alle persone viene instradata su stderr, così i canali restano puliti. La superficie CLI preesistente è pienamente retrocompatibile: gli script CI e le integrazioni dei clienti già in uso non richiedono modifiche.
    • babel --help --format=json e babel --version --format=json emettono uno schema leggibile da una macchina che descrive ogni opzione (nome, alias, tipo, container, flag negabile, descrizione, gruppo) oppure le informazioni su runtime e piattaforma. L'output testuale di --help e --version resta invariato con --format=text.
    • Il nuovo flag --quiet (alias -q) sopprime il banner del logo e fa fallire subito, con un errore esplicito, le richieste interattive di password invece di bloccarsi in attesa di input — comportamento sicuro per le invocazioni non presidiate e per quelle degli agent.
    • Il nuovo flag --strict-exit abilita i codici di uscita semantici: 0 successo, 10 argomenti non validi, 20 input non trovato, 30 errore di offuscamento, 40 errore di licensing, 50 errore di chiave/firma. Senza questo flag resta valido il contratto storico 0/1.

Modifiche

  • Licenza Enterprise — restrizione NuGet/dotnet irrigidita: Le licenze Enterprise sono ora bloccate del tutto su .NET (CoreCLR). In precedenza erano bloccate solo sulle piattaforme dotnet non Windows ma venivano comunque accettate su Windows, il che permetteva di usarle attraverso il task MSBuild NuGet Babel.Obfuscator. Le licenze Enterprise sono ora limitate a babel.exe e a Babel UI (NET472), come documentato.

Correzioni di bug

  • Ridenominazione cross assembly — membri di interfaccia: Risolta una regressione per cui proprietà e metodi locali che implementavano implicitamente un membro di interfaccia proveniente da un assembly esterno venivano comunque rinominati anche quando il file di mappa esterno indicava quel membro come escluso (nodo presente, senza attributo newName). VirtualMembersObfuscatorVisitor.ProcessVirtualMembers ora consulta la MapFileNameStrategy esterna quando raccoglie le esclusioni, così una voce esterna di "non rinominare" si propaga al membro locale che la implementa e il dispatch delle interfacce continua a funzionare a runtime.
  • Ridenominazione dei parametri in overload (.NET Android, .NET 10 SDK 36): Risolti gli errori redefinition of argument in marshal_methods.*.ll durante la compilazione di assembly .NET Android con i tool 36 dell'SDK .NET 10. OverloadedParameterStrategy assegnava lo stesso nome a tutti i parametri dei metodi in overload, cosa che il generatore di marshal method in LLVM IR di Android non consente. RenameParameters garantisce ora l'univocità aggiungendo un suffisso numerico quando rileva un nome duplicato, invece di disattivare la ridenominazione degli overload per gli assembly Android.
  • Regex ExcludeFiles: Rimossa un'ancora $ finale di troppo nel pattern regex ExcludeFiles in build.cake, che faceva mantenere erroneamente alcuni file nell'output della build.

Sicurezza

  • MsilMethodProvider — divulgazione di informazioni negli errori di decifratura: Quando la decifratura del codice falliva, il messaggio dell'eccezione includeva la password usata per il tentativo. Il messaggio di errore è stato riscritto in modo che la password non finisca più negli stack trace o nei log.
  • Rotazione delle password interne di firma delle licenze: Sono state ruotate le password interne di firma incorporate in Keys/{enterprise,ultimate,server,datacenter,standard,professional}.json[x], usate per firmare le abilitazioni di edizione consumate da Obfuscator.cs e StandardPhaseBuilder.cs. Non è richiesta alcuna azione da parte dei clienti, ma è opportuno ricostruire gli assembly offuscati con la 11.7.0 per adottare le nuove chiavi.

Babel Licensing

Miglioramenti

  • Licenza di attivazione — aggiornamento della data di scadenza: Aggiunto il supporto nella Web API e l'integrazione nell'editor delle licenze di Babel UI per aggiornare la data di scadenza delle licenze di attivazione senza riemettere la licenza. Il Management Controller espone ora l'endpoint corrispondente e alcuni test end-to-end coprono il flusso (ActivationLicenseTest, GrpcClientTests, LicensesView).
  • Cifratura dell'archivio Babel.Licensing — da DES ad AES: La cifratura dell'archivio IsolatedFileDate è stata migrata da DES (56 bit, banalmente violabile) ad AES-128 con chiave derivata tramite SHA-256. Il cambiamento è retrocompatibile: i dati cifrati con DES restano leggibili al primo accesso e vengono riscritti automaticamente in AES al salvataggio successivo. I file corrotti o migrati solo parzialmente vengono rilevati e verificati durante la migrazione per evitare errori a runtime.

Sicurezza

  • AuthController — rimossa la registrazione delle password in chiaro: Le credenziali di login inviate all'AuthController del servizio di licensing venivano registrate a livello Information e conservate nei sink di log su console, file e database. Ora viene registrato solo il nome utente. Gli operatori dovrebbero ruotare gli archivi di log storici che potrebbero contenere le credenziali registrate in precedenza.
  • Rimosse le credenziali admin predefinite e la chiave di firma JWT hardcoded: Sono stati rimossi da appsettings.json l'account predefinito admin/admin e la chiave di firma JWT hardcoded. Il servizio di licensing genera ora automaticamente all'avvio una chiave di firma casuale e crittograficamente sicura se non ne è configurata una. Le installazioni esistenti devono configurare esplicitamente un account amministratore al primo avvio; le precedenti credenziali predefinite non consentiranno più l'autenticazione. È stato rimosso anche il fallback storico che provava la password come UserKey durante il login con utente e password, mantenendo il percorso di autenticazione dedicato a UserKey rigorosamente separato (nessun ruolo ⇒ nessuna escalation ad amministratore).
  • Whitelist di IP — elenco di autorizzazione contro esenzione dai limiti di frequenza: La whitelist di IP in IpFilteringMiddleware si comportava erroneamente come un elenco di autorizzazione esclusivo: non appena esisteva una voce in whitelist, tutti gli IP non inclusi venivano bloccati dal servizio. La semantica della whitelist è stata corretta: gli IP in whitelist sono ora esenti dai limiti di frequenza contro gli attacchi a forza bruta, mentre tutti gli altri IP continuano ad accedere normalmente al servizio, soggetti ai limiti di frequenza standard.