Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
icicle — Fuzzer baseado em emulação para firmware MSP430 que encontra e analisa bugs de corrupção de memória com relatórios de crash detalhados e entradas reproduzíveis. | Kitploit
Ferramentas/GitHubGitHub/icicle-emu/icicle
Segurança de Sistemas EmbarcadosAnálise Dinâmica (Sandboxing)Análise de VulnerabilidadesFuzzingAnálise de BináriosAnálise de Firmware
GitHubicicle-emu/icicle

icicle

Fuzzer baseado em emulação para firmware MSP430 que encontra e analisa bugs de corrupção de memória com relatórios de crash detalhados e entradas reproduzíveis.

Ver Repositório
1921417há 2 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Análise de falhas do MSP430

Falhas encontradas em binários MSP430 pelo Icicle.

#AlvoDescrição
I03GoodwatchComparação incorreta ao escrever em dmesg_buffer
I04GoodwatchComprimento de mensagem zero
I05GoodwatchEstouro de RNG
I06GoodwatchAcesso fora dos limites em OOK keypress
I07GoodwatchAcesso fora dos limites após 60 horas no cronômetro
I08GoodwatchAcesso fora dos limites ao exibir o dia da semana
I09GoodwatchAplicativo Hex viewer
I10GoodwatchComandos de monitor PEEK/POKE
I11H4_PacketProtocolÍndice de interface não verificado em Get Descriptor
I12H4_PacketProtocolEstouro de buffer em Set Report

Goodwatch

I03: Comparação incorreta ao escrever em dmesg buffer

  • Um erro de off-by-one em putchar causa uma gravação OOB de um único byte em 0x2c00.
  • Nota: evitamos acionar isto durante o fuzzing aumentando o tamanho da região de memória que contém o buffer.

Exemplo de pilha de chamadas durante a falha:

UnhandledException(code=WriteUnmapped, value=0x2c00):
0x000000c81a: putchar+0x1c
0x000000c832: dmesg_putc+0x6
0x0000009706: tfp_format+0x22
0x000000ad9c: tfp_printf+0x12
0x000000b924: key_scan.part.0+0x68
0x000000cd3c: PORT2_ISR+0x1a
0x0000008e04: <unknown>

I04: Comprimento de mensagem zero

  • Mensagens enviadas à interface UART com o campo de comprimento definido como zero são tratadas incorretamente. No estado MSG, após armazenar o byte que acabou de ser recebido no index atual do uart_buffer, ele incrementa index e verifica se agora é igual a length; porém, como o armazenamento e o incremento de index ocorrem antes da comparação com length, para mensagens de comprimento zero a condição index == length nunca será verdadeira.

  • Eventualmente, index excederá o array uart_buffer, permitindo que variáveis globais armazenadas após uart_buffer sejam modificadas. Isso normalmente resulta em uma falha do programa quando os ponteiros de função stdout_putf ou stdout_putp são sobrescritos e uma mensagem de depuração é impressa.

Entrada que causa a falha:

./run_goodwatch.sh I04a

Pilha de chamadas durante a falha:

UnhandledException(code=InvalidInstruction)
0x000000d3d3: <unknown>
0x0000009648: putchw+0x40
0x0000009826: tfp_format+0x142
0x000000ad9c: tfp_printf+0x12
0x000000b924: key_scan.part.0+0x68
0x000000cd3c: PORT2_ISR+0x1a
0x0000008e04: <unknown>
  • Outra maneira de o programa falhar é se appindex (ou subindex) for sobrescrito, causando uma falha na próxima vez que um applet for carregado usando appindex (por exemplo, em app_draw).

Pilha de chamadas durante a falha:

UnhandledException(code=InvalidInstruction)
0x000000531c: <unknown>
0x0000009a96: app_init+0xe
0x000000c0a8: settime_draw+0x28
0x0000009b0a: app_draw+0x3e
0x000000ce78: watchdog_timer+0x6a
0x0000008e04: <unknown>

I05: Estouro de RNG:

  • O comando de monitor RANDINT faz o firmware gerar e enviar uma lista de números aleatórios. No entanto, o número de valores aleatórios a gerar é controlado pelo comando recebido. Se o número de valores a gerar for grande demais, rints excederá o espaço reservado para a pilha, acionando uma gravação OOB.

Entrada que causa a falha:

./run_goodwatch.sh I05

Pilha de chamadas durante a falha:

UnhandledException(code=WriteUnmapped, value=0x6e6a)
0x000000cbd4: USCI_A0_ISR+0x24c (inlined `send_randint`)
0x0000008e04: <unknown>

I06: Acesso fora dos limites em ook keypress:

  • O aplicativo OOK envia um pacote OOK pré-configurado de button_array quando uma das teclas numéricas (0-9) é pressionada. No entanto, ook_keypress não valida se a tecla pressionada está dentro dos limites do array button_array. Existem 10 botões numéricos (0-9) button_array contém apenas 9 entradas.

  • button_array contém um array de ponteiros; quando o botão 9 é pressionado no aplicativo OOK, a função setrate do programa lerá um ponteiro fora dos limites de button_array e o desreferencia, causando uma falha no programa.

  • O ponteiro lido é o primeiro valor de ook_settings (0x3012), que não existe na memória.

Entrada que causa a falha:

./run_goodwatch.sh I06

Pilha de chamadas durante a falha:

UnhandledException(code=ReadUnmapped, value=0x3012)
0x000000b87a: ook_keypress+0x2c
0x000000cd7e: PORT2_ISR+0x5c
0x0000008e04: <unknown>

I07: Acesso fora dos limites após 60 horas no cronômetro:

  • O firmware implementa a operação de conversão de inteiro para decimal codificado em binário (BCD) usando uma tabela de consulta; no entanto, a tabela de consulta (bcdtable) contém apenas valores para converter inteiros de 0 a 59. Para converter segundos e minutos, isso é suficiente, pois esses valores são reiniciados ao chegar a 60 durante a contagem; porém, a variável hour pode exceder 60, causando um índice fora dos limites.

  • Esse bug só foi encontrado pelo fuzzer como efeito colateral da corrupção causada pelo bug de comprimento de mensagem zero. Na falha encontrada pelo fuzzer, as variáveis globais min e hour são corrompidas quando uart_buffer é estourado.

Entrada que causa a falha:

./run_goodwatch.sh I07

Pilha de chamadas durante a falha:

UnhandledException(code=ReadUnmapped, value=0x4b57)
0x000000a3e4: stopwatch_draw+0x9e
0x0000009b0a: app_draw+0x3e
0x000000ce78: watchdog_timer+0x6a
0x0000008e04: <unknown>

I08: Acesso fora dos limites ao exibir o dia da semana:

  • Falso positivo causado pelo fuzzer ao gerar um valor grande para o periférico RTCDOW.

  • Pressionar o botão 9 no aplicativo de relógio tenta desenhar o dia atual da semana no LCD. O dia da semana é lido diretamente do registrador RTCDOW do periférico RTC; a documentação deste registrador especifica que o valor retornado está entre 0 e 6, porém, durante o fuzzing, o valor deste registrador não tem restrições. Como o valor é usado como um índice no array dayofweek, se o fuzzer gerar um valor maior que 6 para o registrador RTCDOW, o programa lerá um ponteiro fora do array daysofweek, resultando em uma falha (falso positivo).

  • Essa falha pode ocorrer tanto em clock_keypress quanto em hebrew_keypress.

Entrada que causa a falha:

./run_goodwatch.sh I08a

Pilha de chamadas durante a falha:

UnhandledException(code=ReadUnmapped, value=0x5150)
0x0000009e6e: lcd_string+0x8
0x000000c1dc: clock_keypress+0x6c
0x000000cd7e: PORT2_ISR+0x5c
0x0000008e04: <unknown>

Entrada que causa a falha:

./run_goodwatch.sh I08b

Pilha de chamadas durante a falha:

UnhandledException(code=ReadPerm, value=0x1006)
0x0000009e6e: lcd_string+0x8
0x000000b2aa: hebrew_keypress+0x116
0x000000c48c: clock_keypress+0x31c
0x000000cd7e: PORT2_ISR+0x5c
0x0000008e04: <unknown>

I09: Aplicativo Hex viewer:

  • O aplicativo Hex Viewer permite visualizar a memória a partir de um endereço controlado pelo usuário. Ao navegar o Hex Viewer para um endereço não mapeado, isso faz o emulador relatar uma falha.

Entrada que causa a falha:

./run_goodwatch.sh I09

Pilha de chamadas durante a falha:

UnhandledException(code=ReadUnmapped, value=0x7000)
0x0000009c74: hex_draw.part.0+0x3c
0x0000009c88: hex_draw+0x8
0x0000009b0a: app_draw+0x3e
0x000000cd8c: PORT2_ISR+0x6a
0x0000008e04: <unknown>

I10: Comandos de monitor PEEK/POKE:

Baixar ferramenta