Versione 11.7.0.0
Babel Obfuscator
Miglioramenti
- Modalità CLI adatta all'AI: Nuovo flag globale
--format=text|json|ndjson(predefinitotext). Conjsonondjson, stdout diventa uno stream strutturato conforme allo schemababel.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=jsonebabel --version --format=jsonemettono 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--helpe--versionresta 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-exitabilita i codici di uscita semantici:0successo,10argomenti non validi,20input non trovato,30errore di offuscamento,40errore di licensing,50errore di chiave/firma. Senza questo flag resta valido il contratto storico0/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 ababel.exee 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.ProcessVirtualMembersora consulta laMapFileNameStrategyesterna 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 argumentinmarshal_methods.*.lldurante la compilazione di assembly .NET Android con i tool 36 dell'SDK .NET 10.OverloadedParameterStrategyassegnava 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.RenameParametersgarantisce 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 regexExcludeFilesinbuild.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 daObfuscator.cseStandardPhaseBuilder.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'
AuthControllerdel servizio di licensing venivano registrate a livelloInformatione 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.jsonl'account predefinitoadmin/admine 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 comeUserKeydurante il login con utente e password, mantenendo il percorso di autenticazione dedicato aUserKeyrigorosamente separato (nessun ruolo ⇒ nessuna escalation ad amministratore). - Whitelist di IP — elenco di autorizzazione contro esenzione dai limiti di frequenza: La whitelist di IP in
IpFilteringMiddlewaresi 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.

