1. La resposta curta

Sí, és real i convé actuar aquesta setmana. Afecta qualsevol aplicació Java que es connecti per HTTPS a altres servidors: passarel·les de pagament, bancs, API o serveis de l'Administració. Un atacant situat al mig de la xarxa pot fer-se passar per aquell servidor i llegir o canviar el que hi circula. No és una porta oberta des d'internet, però la solució és tan barata que no compensa esperar.

La regla ràpida

Si pots actualitzar Java, instal·la la versió del 24 d'octubre. Si no pots, retira avui les quatre arrels amb keytool. En tots dos casos, reinicia i comprova-ho.

2. Què ha passat, en 30 segons

eMudhra, una autoritat de certificació índia que ven certificats amb la marca emSign, va generar l'abril de 2025 vuit certificats intermedis amb un error greu: les seves claus privades eren nombres minúsculs. Una era literalment el 4. Qualsevol les pot recalcular a partir del mateix certificat, que és públic.

Amb una d'aquestes claus es pot signar un certificat vàlid per a qualsevol domini. El 17 d'octubre de 2026 un investigador ho va comunicar als navegadors, que els van bloquejar en pocs dies. eMudhra els va revocar el 18 i Sectigo, que n'havia signat versions creuades, el 19. Java hi va continuar confiant fins que Oracle va publicar dues alertes d'emergència fora del seu calendari trimestral.

Diagrama: la teva aplicació Java es connecta a un servidor real. Un atacant al mig presenta un certificat fals signat amb un intermedi d'eMudhra la clau privada del qual és 4. Java sense corregir l'accepta i els navegadors actualitzats el bloquegen.
L'atacant no trenca el xifratge. Presenta un certificat que Java dona per bo perquè l'arrel de la qual penja és al seu magatzem.
Alerta d'Oracle Data Què corregeix
CVE-2026-9140321 d'octubreDeixa de confiar en els 8 intermedis i en les seves versions signades per Sectigo.
CVE-2026-11482024 d'octubreRetira 4 arrels del magatzem: les 2 relacionades amb els intermedis (emSign ECC Root CA - G3 i AAA Certificate Services) i 2 més d'eMudhra. És la versió que has de tenir.

3. Per què Java és la baula feble

El teu navegador ja estava protegit. La teva aplicació Java no, per tres motius que convé conèixer perquè es repetiran en el proper incident.

1Magatzem propi

Java porta la seva pròpia llista d'autoritats de confiança, el fitxer cacerts. No rep els bloquejos que Chrome, Firefox o Windows distribueixen sols.

2Sense revocació

Per defecte no consulta si un certificat ha estat revocat. Que eMudhra els revoqués no canvia res per a Java.

3Sense Certificate Transparency

No exigeix que el certificat consti als registres públics de Certificate Transparency. Un certificat fals que mai no s'hi va registrar passa sense que aquests registres el delatin.

Què podria fer un atacant al mig

  • Llegir credencials, tokens d'API i dades personals que la teva aplicació envia als seus proveïdors.
  • Canviar respostes: l'estat d'un pagament, un import o el resultat d'una validació.
  • Colar una dependència maliciosa en una compilació amb Maven o Gradle.
  • Fer passar per signat un JAR maliciós, perquè dos dels intermedis servien per signar codi.
El que ho fa greu

Barat i difícil de detectar

Les claus es podien recuperar des de l'abril de 2025 i una ja circula publicada. Un certificat fals usat contra Java no ha d'aparèixer necessàriament als registres públics. No hi ha explotació confirmada, però tampoc no es pot descartar.

El que ho limita

Cal ser al mig

L'atacant necessita controlar el camí de xarxa: una wifi, un DNS enverinat, un encaminador o un proxy. Red Hat, en una valoració preliminar amb supòsits d'atac més exigents, el deixa en 6,8. El risc és a les connexions que el teu Java obre cap a fora, no a les que rep el teu web.

4. M'afecta? Comprova-ho en un minut

Afecta Oracle Java SE 8, 11, 17, 21, 25 i 27, GraalVM i qualsevol distribució d'OpenJDK el magatzem de la qual conservi aquestes arrels. També les versions sense suport i les aplicacions que porten el seu propi Java, com AutoFirma, OpenSearch o els entorns de desenvolupament. El més ràpid és mirar-ho.

Pas 1. Localitza el java.home de cada servei i desa'l a la variable JH:

java -XshowSettings:properties -version 2>&1 | grep java.home
JH="/opt/java/jdk-21"
KS="$JH/lib/security/cacerts"

Pas 2. Descarrega la comprovació oficial d'OpenJDK i executa-la amb el mateix Java que fa servir el servei. Amb Java 11 o posterior:

curl -fsSLO https://cr.openjdk.org/~mr/CheckCerts.java &&
"$JH/bin/java" CheckCerts.java

Amb Java 8 a 10, o si aquell Java no porta compilador (per exemple, un JRE), compila-la amb el javac de qualsevol JDK i executa la classe amb el Java del servei. Els avisos de javac són normals:

curl -fsSLO https://cr.openjdk.org/~mr/CheckCerts.java &&
javac -source 8 -target 8 CheckCerts.java &&
"$JH/bin/java" -cp . CheckCerts

A Windows, la comprovació va inclosa als blocs de l'opció 2.

Si respon No bad root certificates found, aquell magatzem està net. Si mostra BAD ROOT amb emSign ECC Root CA - G3 o AAA Certificate Services, continua llegint. Les arrels emSign Root CA - G1 i G2 no estan lligades als intermedis compromesos, tot i que Oracle també les retira.

Compte: comprova el magatzem del Java amb què la llances. Si un servei arrenca amb un altre magatzem, per exemple amb l'opció -Djavax.net.ssl.trustStore, revisa'l a part.

Ho he comprovat

He recuperat les vuit claus privades a partir dels certificats públics en segons: totes són nombres inferiors a 256 i la de l'intermedi EM OV TLS CA - G3C és, literalment, el 4. I en un Java 25.0.3 sense corregir, la connexió als servidors de prova de l'incident respon 200 com si res. Després de retirar les quatre arrels, Java la rebutja i els webs de control que vaig provar continuen funcionant.

Arbre de decisió: si el teu Java ve d'un paquet de Linux, actualitza ca-certificates i, a Debian i Ubuntu, regenera a més el magatzem de Java. Si és un JDK descarregat o en contenidor, instal·la la versió del 24 d'octubre o, si no pots, esborra quatre arrels amb keytool. Després reinicia i comprova-ho amb CheckCerts.java.
El camí més curt depèn d'on surt el teu Java. Tots acaben igual: reiniciar i comprovar.

5. Opció 1: actualitzar Java (el recomanable)

És la via neta. Instal·la la versió de la teva branca publicada el 24 d'octubre, que bloqueja els intermedis i a més retira les arrels. Les del 21 d'octubre, com la 21.0.13.0.2, només fan el primer.

Branca Versió d'Oracle amb la correcció completa
Java 88u511-b33
Java 1111.0.33.0.3
Java 1717.0.21.0.3
Java 2121.0.13.0.3
Java 2525.0.5.0.3
Java 2727.0.1.0.3

Si fas servir una altra distribució d'OpenJDK, com Temurin, Corretto, Zulu o la de Red Hat, busca a les seves notes de versió JDK-8395690 o CVE-2026-114820 i confirma-ho amb la comprovació del punt 4. GraalVM d'Oracle també està afectat i té la seva pròpia actualització.

Les versions sense suport, com Java 23 o 26, ja no reben pedaços. Fes servir l'opció 2 i planifica el salt a una versió amb suport a llarg termini. I recorda que el canvi no té efecte fins que reinicies cada servei i reconstrueixes les imatges de contenidor que porten Java a dins.

6. Opció 2: sense actualitzar, quatre ordres

Si avui no pots canviar de versió, fes a mà el mateix que fa el pedaç: retira del magatzem de Java les quatre arrels afectades. No canvies de versió ni recompiles res. Només reinicies.

Linux o macOS, de Java 8 a Java 27. Fa una còpia amb un nom únic i, només si la còpia surt bé, retira les arrels:

JH="/opt/java/jdk-21"
KS="$JH/lib/security/cacerts"
B=$(sudo mktemp "$KS.bak-$(date +%Y%m%d)-XXXXXX") && sudo cp "$KS" "$B" &&
for a in emsignrootcag1 emsignrootcag2 emsigneccrootcag3 comodoaaaca; do
  sudo "$JH/bin/keytool" -delete -keystore "$KS" -storepass changeit -alias "$a [jdk]"
done

Windows, des de PowerShell obert com a administrador. Si la còpia falla, no esborra res:

$JH = "C:\Program Files\Java\jdk-21"
$KS = "$JH\lib\security\cacerts"
try {
  [IO.File]::Copy($KS, "$KS.bak-$(Get-Date -Format yyyyMMdd-HHmmss)", $false)
  foreach ($a in "emsignrootcag1","emsignrootcag2","emsigneccrootcag3","comodoaaaca") {
    & "$JH\bin\keytool" -delete -keystore $KS -storepass changeit -alias "$a [jdk]"
  }
} catch { Write-Warning $_ }

Després, a la mateixa consola, llança la comprovació. Amb Java 11 o posterior:

try {
  Invoke-WebRequest https://cr.openjdk.org/~mr/CheckCerts.java -OutFile CheckCerts.java -ErrorAction Stop
  & "$JH\bin\java" CheckCerts.java
} catch { Write-Warning $_ }

Amb Java 8 a 10, o si aquell Java no porta compilador, llança aquest altre bloc de comprovació en lloc seu. Necessita el javac d'un JDK 8 o posterior:

try {
  Invoke-WebRequest https://cr.openjdk.org/~mr/CheckCerts.java -OutFile CheckCerts.java -ErrorAction Stop
  javac -source 8 -target 8 CheckCerts.java
  if ($LASTEXITCODE -eq 0) { & "$JH\bin\java" -cp . CheckCerts }
} catch { Write-Warning $_ }

Canvia la ruta de la primera línia pel teu java.home. changeit és la contrasenya per defecte del magatzem. Si keytool et suggereix fer servir l'opció -cacerts, no passa res. Si diu que un àlies no existeix, la comprovació final et dirà si queda alguna arrel amb un altre nom.

Reinicia els serveis Java. A Linux i macOS, repeteix la comprovació del punt 4. Ha de dir No bad root certificates found.

Marxa enrere

Si una connexió legítima deixa de funcionar, restaura la còpia cacerts.bak-… sobre cacerts i reinicia. Però compte: així tornes a confiar en aquestes arrels i reobres el risc. Fes-ho servir només per recuperar el servei mentre actualitzes Java o resols aquella connexió.

7. Si el teu Java ve de la teva distribució Linux

Si vas instal·lar Java amb apt o dnf, normalment fa servir el magatzem del sistema i n'hi ha prou d'actualitzar-lo. Hi ha una excepció important a Debian i Ubuntu.

RHEL 8, 9 i 10, Fedora, Oracle Linux, Rocky i Alma (a RHEL 7 el paquet corregit encara està pendent):

sudo dnf upgrade ca-certificates

Debian i Ubuntu: no n'hi ha prou d'actualitzar, per un error antic de ca-certificates-java que no esborra del magatzem de Java el que el sistema ja ha retirat. Cal regenerar-lo:

Abans de regenerar: això esborra les CA internes que algú hagi afegit a mà amb keytool en aquest magatzem. Les instal·lades a /usr/local/share/ca-certificates tornen soles. Si en tenies alguna d'afegida a mà, torna-la a importar des de la còpia abans de reiniciar. Si un pas falla, el bloc s'atura.

sudo apt update &&
sudo apt install --only-upgrade ca-certificates ca-certificates-java &&
B=$(sudo mktemp /root/java-cacerts.bak-XXXXXX) && sudo cp -L /etc/ssl/certs/java/cacerts "$B" &&
sudo rm -f /etc/ssl/certs/java/cacerts &&
sudo update-ca-certificates --fresh

Després, reinicia els serveis Java i comprova-ho amb CheckCerts. Si encara surten emSign ECC Root CA - G3 o AAA Certificate Services, el teu paquet ca-certificates encara no porta la correcció.

8. El que aquest cas demana al compliment

Si la teva organització treballa amb l'ENS, la ISO 27001, NIS2 o dades personals, això no és només un ajust tècnic. És una prova que la teva gestió de vulnerabilitats funciona de debò.

  • Inventari. Saber quin Java s'executa en servidors, contenidors, integració contínua i aplicacions de tercers que porten el seu, que poden recuperar el seu magatzem original quan s'actualitzen. El que no està inventariat no s'apedaça.
  • Evidència. Deixar registrat què vas revisar, què vas canviar i quan. És el que esperen l'ENS (op.exp.4), la ISO 27001 (control 8.8) i NIS2 (article 21).
  • Versions sense suport. Un Java que ja no rep pedaços és un deute que aquest cas fa visible. Planifica el salt a Java 21 o 25.
  • Possible bretxa. Si sospites que algú va interceptar trànsit amb dades personals, valora si és una bretxa que has de notificar en 72 hores (RGPD, article 33).
Preguntes freqüents

Preguntes freqüents

És tan greu com Log4Shell?

No. Log4Shell permetia executar codi en un servidor amb una simple petició. Aquí l'atacant ha de ser al mig de la xarxa per suplantar un servidor HTTPS davant la teva aplicació Java. És seriós perquè és difícil de detectar, però exigeix una posició que no sempre té a l'abast.

Vaig actualitzar Java el 21 d'octubre. Estic cobert?

Només en part. Aquella versió deixa de confiar en els vuit intermedis coneguts. La del 24 d'octubre, per exemple la 21.0.13.0.3, retira a més quatre arrels del magatzem, entre elles les dues relacionades amb aquests intermedis. Instal·la-la o aplica les ordres de keytool, que no fan cap mal si alguna arrel ja no hi és.

La meva aplicació és darrere de nginx o Apache. M'afecta?

El proxy protegeix les connexions que reps, no les que la teva aplicació obre cap a fora. Si el teu Java crida per HTTPS passarel·les de pagament, bancs, API o serveis de l'Administració, aquestes connexions continuen exposades fins que ho corregeixis.

Retirar aquestes arrels pot trencar alguna cosa?

És el mateix canvi que fa el pedaç oficial d'Oracle. Les cadenes actuals de Sectigo solen acabar a USERTrust o a les seves arrels noves, no a AAA, i en les meves proves els destins habituals van continuar funcionant. Tot i així, algun servei antic en podria dependre, així que prova les teves connexions crítiques. Si restaures la còpia, recuperes la connexió però també la confiança en aquestes arrels.

Faig servir Java 23 o una altra versió sense suport. Què faig?

No t'arribarà cap pedaç. Aplica avui l'opció 2, que funciona en qualsevol versió des de Java 8, i planifica el pas a una versió amb suport a llarg termini, com Java 21 o 25.

I si el meu Java s'executa en contenidors Docker?

Cada imatge porta el seu propi Java i el seu propi magatzem, així que actualitzar el servidor no la corregeix. El més net és reconstruir-la sobre una imatge base ja corregida i comprovar-la amb CheckCerts. Si encara no n'hi ha, afegeix al Dockerfile un pas RUN que executi keytool -delete -cacerts -storepass changeit amb cadascun dels quatre àlies (des de Java 11) i torna a desplegar els contenidors.

Puc activar la comprovació de revocació en lloc de retirar arrels?

És una altra via que recull OpenJDK, afegint -Dcom.sun.net.ssl.checkRevocation=true i -Dcom.sun.security.enableCRLDP=true a l'arrencada. Però afegeix consultes de xarxa a les connexions i, si la llista de revocació no arriba, la connexió falla. Per al mínim impacte, prefereixo retirar les arrels.

Pas següent

Si això afecta els teus sistemes

T'ha estat útil?

Comparteix-lo amb qui manté els vostres servidors Java.

Pensat per a responsables de TI, seguretat i direcció que necessiten decidir de pressa i sense alarmisme.

LinkedIn

Fonts consultades

Data de tall: 25 d'octubre de 2026. La situació evoluciona: revisa les fonts oficials abans d'actuar.

Ajuda immediata

No saps quin Java tens en producció?

Puc inventariar els vostres entorns d'execució Java, aplicar la correcció amb marxa enrere i deixar-vos l'evidència a punt per a l'ENS, la ISO 27001 o NIS2.