O OpenSSH 10.4 foi lançado em 6 de julho de 2026, oferecendo uma série de correções de segurança, melhorias de usabilidade e recursos experimentais. A distribuição está disponível nos mirrors listados em https://www.openssh.com/ e o projeto agradece à comunidade por seus comentários, relatórios de bugs e contribuições.
Mudanças potencialmente incompatíveis
sshd(8) – Modo de despejo de configuração
O comando sshd -G agora escreve diretivas em mixed case (por exemplo, PubkeyAuthentication), diferentemente das versões anteriores que emitiam apenas nomes em lower‑case.
sshd(8) – Sandbox seccomp no Linux
Em sistemas Linux com o sandbox seccomp habilitado, falhas ao ativar SECCOMP ou NO_NEW_PRIVS agora são fatais. Anteriormente, o sshd registrava o erro, mas continuava operando, o que podia causar problemas em sistemas sem esses recursos. Sistemas sem suporte agora devem desabilitar o sandbox na configuração.
ssh(1), sshd(8) – Protocolo de transporte mais rigoroso
O protocolo agora desativa a conexão se o peer enviar mensagens não-KEX durante um reexame de chave pós-autenticação. Antes, um peer malicioso podia enviar mensagens não relacionadas ao intercambio de chaves indefinidamente, consumindo memória até que a conexão fosse encerrada ou um limite fosse atingido. Implementações que não restringem mensagens conforme RFC4253 §7.1 podem ser desconectadas. Relatório de Marko Jevtic.
Segurança
-
sftp(1) – Corrigido um problema que permitia a um servidor malicioso redirecionar downloads da linha de comando (
sftp host:/path .) para um local inesperado. Identificado pelo Swival Security Scanner. -
scp(1) – Impedido que um servidor malicioso escreva arquivos no diretório pai do destino pretendido ao copiar entre dois destinos remotos. Também detectado pelo Swival Security Scanner.
-
sshd(8) – No servidor SFTP interno (
internal-sftp), linhas de comando longas eram truncadas silenciosamente após o 9º argumento. Opções de segurança relevantes na 10ª posição ou posterior eram descartadas. Relatório de Steve Caffrey. -
sshd(8) – Adicionada nota na documentação informando que
GSSAPIStrictAcceptorChecknão tem efeito quando o servidor está integrado a um Windows Active Directory. Reportado por Yarin Aharoni da Safebreach. -
sshd(8) – A opção
DisableForwarding=yesnão substituíaPermitTunnel=yes, conforme documentado. Note-se quePermitTunnelnão está habilitado por padrão. Relatório independente de Huzaifa Sidhpurwala (Red Hat) e Marko Jevtic. -
sshd(8) – Mitigada uma possível negação de serviço pré-autenticação quando
GSSAPIAuthenticationestava habilitado (desativado por padrão). O problema não era atenuado porMaxAuthTries, mas podia ser penalizado porPerSourcePenalties. Reportado por Manfred Kaiser do milCERT (Ministério da Defesa da Áustria). -
sshd(8) – Corrigidos vários casos em que o atraso mínimo de autenticação não era aplicado. Reportado pela Orange Cyberdefense Vulnerability Team.
-
ssh(1) – Corrigido um possível use‑after‑free no cliente se o servidor alterasse sua chave durante um reexame de chave. Reportado por Zhenpeng (Leo) Lin da Depthfirst.
Novos recursos
-
Geral – Suporte experimental a um esquema de assinatura composto pós-quântico que combina ML‑DSA‑44 e Ed25519, conforme especificado no draft‑miller‑sshm‑mldsa44‑ed25519‑composite‑sigs. O recurso não está habilitado por padrão. Para usá-lo, adicione
mldsa44‑ed25519aHostKeyAlgorithms,PubkeyAcceptedAlgorithms, etc. Geração de chaves comssh-keygen -t mldsa44-ed25519. -
ssh(1), sshd(8) – Substituição do correspondente de padrões por uma implementação baseada em NFA, evitando comportamento exponencial no pior caso da versão anterior.
Correções de bugs
-
ssh‑agent(1) – Corrigida resposta incorreta a requisições
SSH_AGENTC_EXTENSIONdo tipo “query”. (bz3967) -
sshd(8) – Evitado envio de mensagens observavelmente diferentes para usuários válidos vs inválidos no contexto de
GSSAPIAuthentication(desativado por padrão). -
ssh(1), sshd(8) – Corrigidos vários bugs que classificados incorretamente tráfego em massa como interativo. (bz3972, bz3958)
-
ssh‑keygen(1), ssh‑add(1) – Ignorar tipos de chave não suportados ao baixar chaves residentes de um token FIDO. Anteriormente, o download era abortado ao encontrar um token desse tipo. (GHPR657)
-
ssh(1) – Corrigido um possível use‑after‑free em um caminho de erro se
cipher_init()falha. -
sshd(8) – Realizada codificação e validação mais rigorosas do estado de transporte entre subprocessos de separação de privilégios, endurecendo o servidor contra ataques a
sshd‑authousshd‑session. -
ssh‑agent(1) – Evitado possível esgotamento de recursos em tempo de execução limitando o comprimento de nomes de usuário em restrições de uso de chaves.
-
sftp(1) – Corrigidos dois reads de um byte fora de limites separados, em
SSH2_FXP_REALPATHe processamento de comandos em lote. -
sftp‑server(8) – Impedido uso da extensão copy‑data para ler e gravar no mesmo inode simultaneamente.
-
ssh(1), sshd(8) – Evitado crash por
strlen(NULL)se um canal X11 era criado antes quex11-req SSH_MSG_CHANNEL_REQUESTfosse enviado. (GHPR679) -
sftp(1), scp(1) – Evitado situação em que
sftp_download()poderia ficar em loop se um servidor defeituoso retornasse repetidamente comprimento zero ao ler um arquivo. -
ssh(1) – Evitado vazamento de nomes DNS0x20 caso‑aleatórios para nomes canônicos usando
CanonicalizePermittedCNAMEs. (bz3966) -
sftp‑server(8) – Evitado truncamento de nomes de caminho passados para
lstat()durante tratamento deSSH_FXP_REALPATHem sistemas ondePATH_MAXnão é o valor real máximo. (GHPR688) -
ssh(1), sshd(8) – Corrigido armamento incorreto de máscaras de evento de poll(2) para alguns canais do tipo socket. (GHPR660)
-
sshd(8) – Grande refatoração do código de análise e gerenciamento de
sshd_config, permitindo serialização/deserialização mais precisa através de limites de separação de privilégios. -
ssh‑add(1) – Conexão com o agente aberta apenas após processamento completo de
getopt(), permitindo que opções como-vexibam informações de depuração sobre esta operação. -
Código criptográfico – Corrigido bounds checking ao assinar mensagens maiores que o espaço em
size_t. Em OpenSSH, tamanhos de mensagens são limitados porSSHBUF_SIZE_MAX, portanto isso era inalcançável. -
Código criptográfico – Adicionadas verificações de maleabilidade de assinatura e validade de chave pública para ed25519. SSH não depende dessas propriedades.
-
Código criptográfico – Corrigido check de ordem ECDSA para curvas com cofator ≠ 1. Todas as curvas EC suportadas têm cofator 1, portanto isso era inalcançável.
-
sshd(8) – Diferenciado falhas de execução de um subsistema não encontrado ao registrar por que um subsistema falhou em iniciar. (GHPR637)
-
Geral – Usados idioms mais seguros para
timegm(3)emktime(3)detecção de erro. -
ssh(1), sshd(8) – Evitado aceite de listas inválidas de cipher ou MAC em arquivos de configuração ou argumentos de linha de comando, o que poderia causar falhas em tempo de execução posteriormente.
-
ssh(1) – Corrigido crash por dereferenciação NULL durante autenticação por chave pública ao usar uma chave privada estilo PEM sem chave pública adjacente
.pub. -
sshd(8) – Não imprimir mensagem de erro ao tentar carregar uma chave privada de host quando chaves PKCS#11 estão em uso, pois essas não precisam da metade privada no sistema de arquivos. (GHPR664)
-
Geral – Não usar
ERR_load_crypto_strings()obsoleto. (GHPR650) -
ssh(1) – Reportar corretamente erros durante definição de padrões de configuração. (GHPR649)
-
ssh(1) – Usar nome de diretiva correto (
Matchem vez deHost) em mensagem de erro. (bz3968) -
sftp(1) – Corrigido
ls -lnque não mostrava corretamente UID/GIDs numéricos, mas nomes de usuário e grupo. (bz3953) -
sshd(8) – Evitar possível dereferenciação NULL se uma alocação falha durante análise de configuração. (bz3948)
-
Geral – Corrigir proteções inefetivas contra carregamento de chaves públicas excessivamente grandes em vários locais. (bz3969, bz3970)
-
sftp(1) – Garantir que descritores de arquivo usados pelo sftp para se comunicar com seu subprocesso ssh(1) não vazem para subprocessos executados (por exemplo, via
!). (GHPR693)
Portabilidade
-
Sincronizado
fmt_scaled.ccom upstream OpenBSD, incluindo correção de exatidão para expoentes grandes. (GHPR671) -
sshd(8) – Removido item duplicado de sandbox para
clock_gettime64. -
ssh(1), sshd(8) – Usado valor correto de
IPTOS_DSCP_VAse não fornecido pelos cabeçalhos do sistema. -
Sincronizado
getrrsetbyname.ccom upstream OpenBSD, incluindo correções de robustez. -
Desabilitados substitutos em openbsd-compat para
strvisx(3)estravis(3), pois não são usados no OpenSSH. -
Evitado avisos de fortify no Android. (bz3954)
-
Corrigido um número de vazamentos de memória em caminhos de erro no código de portabilidade. (GHPR681)
-
Revisada documentação de
README.privseppara refletir recente mudança do sshd para um modelo multi‑binary.
Checksum
-
SHA1 (openssh-10.4.tar.gz) = 8502b516230865e229d55045bb4ccc67aeae905b
-
SHA256 (openssh-10.4.tar.gz) = qUVI+wMg4mVpiQbXvfMVkF3Zuyy2JrS+ZjN764mtyGE=
-
SHA1 (openssh-10.4p1.tar.gz) = ae8650a71cc52dbbd049519cee276ae6d65c2c4d
-
SHA256 (openssh-10.4p1.tar.gz) = 72Am3SrqjVYFljjV0yYpAsiSzrqfiDlYNeDQbT+2Mjg=
Observação: As assinaturas SHA256 são codificadas em base64 e não em hexadecimal (padrão da maioria dos ferramentas de checksum). A chave PGP usada para assinar os releases está disponível nos mirrors em https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/RELEASE_KEY.asc.
Reportando Bugs
Leia a página https://www.openssh.com/report.html. Bugs de segurança devem ser reportados diretamente para [email protected].
O OpenSSH 10.4 traz um passo à frente em segurança e confiabilidade para administradores de sistema e desenvolvedores que dependem de conexões SSH seguras. A atualização é recomendada para todos os usuários, especialmente aqueles que operam em ambientes expostos a rede.