Informações do aviso
Título: Elevação de privilégio local no i2p para Windows
Referência do aviso: BLAZE-02-2020
Produto: i2p 0.7.5 a 0.9.45 para Windows
Referência CVE: CVE-2020-13431
Modo de divulgação: Coordenada
Descrição do produto
O i2p (The Invisible Internet Project) é uma rede anônima que expõe uma camada simples que aplicativos podem usar para enviar mensagens entre si de forma anônima e segura.
Frequentemente, o I2P é comparado ao Tor como uma ferramenta de anonimato.
Detalhes da vulnerabilidade
Durante o processo de instalação, o cliente I2P para Windows oferece a opção de ser instalado também como um serviço, chamado I2PSvc.
Ele é executado como SYSTEM e inicia junto com o sistema operacional. Ao inspecionar o I2P para Windows, notou-se que ele se instala em Arquivos de Programas com permissões muito permissivas, permitindo que qualquer usuário substitua o I2PSvc.exe por um executável malicioso.
Para explorar a vulnerabilidade, um invasor deve ter uma conta local sem privilégios no sistema.
Esta vulnerabilidade foi encontrada na versão mais recente 0.9.45, mas afetava o i2p desde a série 0.7 de lançamentos, de mais de uma década atrás.
O I2P instala-se em C:\Program Files\i2p.
Como pode ser visto abaixo, a permissão "F" para BUILTIN\Users significa que todos os usuários do sistema têm controle total sobre o diretório e suas subpastas:

Ao substituir o executável do serviço por um malicioso, um invasor pode executar código com privilégios de SYSTEM.
Prova de conceito
Abaixo, podemos ver as permissões fracas do serviço i2p:


O código C a seguir serve como prova de conceito para demonstrar o ataque. Ele criará um arquivo de texto na pasta da área de trabalho do usuário lowpriv com o conteúdo exibindo o nível de permissão atual em que o executável está sendo executado.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winbase.h>
#include <lmcons.h>
int main()
{
TCHAR username[UNLEN + 1];
TCHAR szFileName[MAX_PATH];
DWORD username_len = UNLEN + 1;
char msg[256];
FILE *fp;
char *file = "C:\\Users\\lowpriv\\Desktop\\hello.txt";
GetUserName((TCHAR *)username, &username_len);
GetModuleFileName(NULL, szFileName, MAX_PATH);
if(!strcmp(username, "SYSTEM")) {
snprintf(msg, sizeof(msg)-1, "%s está sendo executado como %s. Elevação de privilégio bem-sucedida.\n", szFileName, username);
}
else {
snprintf(msg, sizeof(msg)-1, "%s está sendo executado como %s\n", szFileName, username);
}
printf("%s\n", msg);
fp = fopen(file, "a+");
if(fp != NULL) {
fputs(msg, fp);
fclose(fp);
}
return 0;
}

Correção e recomendações
Atualize o i2p para a versão v0.9.46.
Créditos
Esta vulnerabilidade foi descoberta e pesquisada por Julio Cesar Fort da Blaze Information Security (https://www.blazeinfosec.com)
Cronograma de divulgação
28/04/2020: Vulnerabilidade reportada para [email protected];
01/05/2020: A equipe de segurança do produto I2P confirmou que conseguiu reproduzir a vulnerabilidade;
16/05/2020: O I2P entrou em contato com a Blaze para informar que o patch foi criado e solicitou a validação;
24/05/2020: A Blaze enviou uma mensagem ao I2P confirmando que o patch corrige a vulnerabilidade adequadamente;
25/05/2020: O MITRE atribuiu o CVE-2020-13431 para este problema;
25/05/2020: O I2P informou à Blaze que quase todos os nós da rede seriam atualizados para a versão mais recente nas próximas 48 horas;
29/05/2020: Comunicado de segurança publicado.
Referências
- https://geti2p.net/en/blog/post/2020/05/25/0.9.46-Release
- https://github.com/blazeinfosec/advisories/blob/master/BLAZE-02-2020_i2p_Windows_local_privilege_escalation.txt
Sobre a Blaze Information Security
A Blaze Information Security é uma empresa independente e privada de segurança da informação, nascida de anos de experiência combinada. Com presença na América do Sul e na Europa, a Blaze conta com uma equipe de engenheiros de segurança seniores com experiência prévia nas principais empresas de consultoria em segurança da informação ao redor do mundo e um histórico comprovado de pesquisas de segurança publicadas.
E-mail: [email protected]
Blog Wildfire Labs: https://www.blazeinfosec.com/labs/
Twitter: https://www.twitter.com/blazeinfosec
GitHub: https://www.github.com/blazeinfosec
Impressão digital da chave PGP: DB53 D9D9 F0E1 E513 4F52 8219 C33B C7FA C5D0 E926




