Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2022-0185-Case-Study — # Caso di studio educativo e guida allo sviluppo di exploit per CVE-2022-0185, un overflow del buffer heap del kernel Linux che consente l'escalation dei privilegi locali. Include POC, debug con QEMU ed exploit per Ubuntu con analisi tecnica dettagliata. | Kitploit
Strumenti/GitHubGitHub/dcheng69/cve-2022-0185-case-study
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitCTFApprendimento e FormazioneBinary ExploitationLab e Pratica
GitHubdcheng69/cve-2022-0185-case-study

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2022-0185-Case-Study

# Caso di studio educativo e guida allo sviluppo di exploit per CVE-2022-0185, un overflow del buffer heap del kernel Linux che consente l'escalation dei privilegi locali. Include POC, debug con QEMU ed exploit per Ubuntu con analisi tecnica dettagliata.

Vedi Repository
31142 anni faNon ancora revisionato

CVE-2022-0185-Case-Study

Questo case study è il risultato di un compito del corso ECE 9069: Introduction to Hacking : https://whisperlab.org/introduction-to-hacking/

Panoramica di CVE-2022-0185

CVE-2022-0185 è un difetto di overflow del buffer basato su heap trovato nel modo in cui la funzione legacy_parse_param nella funzionalità Filesystem Context del kernel Linux verificava la lunghezza dei parametri forniti. Un utente locale non privilegiato (nel caso in cui gli user namespaces non privilegiati siano abilitati, altrimenti è necessario il privilegio CAP_SYS_ADMIN all'interno del namespace) in grado di aprire un filesystem che non supporta l'API Filesystem Context (e che quindi ripiega sulla gestione legacy) potrebbe usare questo difetto per aumentare i propri privilegi sul sistema. [1]

Dopo che questa vulnerabilità è stata segnalata, è stata rilasciata una patch per correggere il bug:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=722d94847de2

https://ubuntu.com/security/CVE-2022-0185#impact-score

C'è un writeup dettagliato dell'esploratore: https://www.hackthebox.com/blog/CVE-2022-0185:_A_case_study

In questo repository spiegherò i passaggi di base e le informazioni di contesto correlate per riprodurre questa vulnerabilità. Inoltre, se c'è qualcosa che non ti è chiaro, puoi inviarmi una email: [email protected]. Sarò molto felice di rispondere alle domande.

1. Introduzione

La vulnerabilità CVE-2022-0185 è stata pubblicata il 02/11/2022, con un punteggio base CVSS 3.x di 8.4 (Alto).[1] Questa vulnerabilità è un overflow del buffer basato su heap, causato da un underflow di un intero senza segno.

La vulnerabilità è stata introdotta nel kernel Linux v5.1, interessando tutte le distribuzioni Linux con versioni del kernel superiori alla 5.1. Per esempio, Ubuntu 20.04 LTS (focal) era vulnerabile a questo bug. Tuttavia, una patch è stata rilasciata ed è disponibile dalla versione 5.4.0-96.109 .[3]

Lo sfruttamento di questa vulnerabilità consente a un utente locale non privilegiato di aumentare i propri privilegi sul sistema, compromettendo potenzialmente l'intero sistema.[1] [2] Ecco un'analisi dettagliata del punteggio CVSS: Punteggio Base: 8.4, che indica un rischio di sicurezza significativo che richiede attenzione immediata. Punteggio di Impatto: 5.9, che suggerisce un potenziale danno sostanziale se sfruttata. I valori elevati di riservatezza, integrità e disponibilità contribuiscono a questo punteggio. Punteggio di Sfruttabilità: 2.5, che suggerisce una sfruttabilità relativamente alta. Il vettore di attacco locale, l'elevata integrità e l'elevata disponibilità contribuiscono a questo punteggio.

La Tabella 1.1 e la Tabella 1.2 forniscono maggiori informazioni su questi punteggi e sui loro componenti.

Gravità CVSS v3.1Valore
Punteggio Base8.4 ALTO
Punteggio di Impatto5.9
Punteggio di Sfruttabilità2.5

Tabella 1.1 Punteggi di gravità CVSS[1]

Metriche CVSS v3.1Valore
Vettore di attacco (AV)Locale
Privilegi richiesti (PR)Nessuno
Interazione utente (UI)Nessuna
Riservatezza (C)Alta
Integrità (I)Alta
Disponibilità (A)Alta

Tabella 1.2 Vettore CVSS[1]

2. Background e concetti correlati

2.1 Underflow dei numeri senza segno

2.1.1 Complemento a due

Nei computer moderni esistono due tipi di interi: con segno e senza segno. La rappresentazione dei numeri con segno coinvolge generalmente un'operazione chiamata complemento a due.[4] “Il complemento a due usa la cifra binaria con il maggior valore posizionale come segno per indicare se il numero binario è positivo o negativo”[4]

L'introduzione del complemento a due converte il calcolo della sottrazione in addizione, semplificando quindi la progettazione e l'implementazione della CPU. La generazione del complemento a due di un intero coinvolge tre passaggi:[4]

  • Passo 1: “Partendo dalla rappresentazione binaria del numero, con il bit iniziale che funge da bit di segno”;
  • Passo 2: “Invertire tutti i bit”;
  • Passo 3: “Aggiungere 1 all'intero numero invertito, ignorando eventuali overflow”

La Fig 2.1.1.1 mostra il processo di conversione in un diagramma con un esempio reale di conversione di “-6” nel suo formato in complemento a due.

twos_complement.drawio

Fig 2.1.1.2 Addizione usando il complemento a due

La Figura 2.1.1.2 mostra il processo di addizione del complemento a due di '-6' a '+6'. Questo dimostra come l'uso del complemento a due consenta di utilizzare l'addizione come sostituto della sottrazione.

twos_complement-Page-2.drawio

Fig 2.1.1.2 Addizione usando il complemento a due

2.1.2 Rappresentazione dei numeri nella RAM

Dalla Sezione 2.1.1, abbiamo già capito cos'è il complemento a due. Ora diamo un'occhiata allo scenario dell'underflow dei numeri senza segno nei computer. Nei computer moderni, quando si usano numeri senza segno, il bit più significativo non viene trattato come bit di segno; invece, fa parte del numero senza segno stesso. Questa situazione significa che quando si esegue una sottrazione con un numero senza segno, bisogna essere cauti, poiché può portare a una condizione nota come underflow dei numeri senza segno.[5]

La Fig 2.1.2.1 illustra la situazione della sottrazione di 6 da 5 per un numero senza segno a 8 bit. Il risultato finale è 255 a causa dell'avvolgimento del numero senza segno. Quando questo underflow si verifica in un'istruzione condizionale, ha il potenziale di interrompere la funzionalità dell'istruzione stessa.

twos_complement-Page-3.drawio

Fig 2.1.2.1 Underflow di un numero senza segno

2.2 Memoria del kernel Linux

2.2.1 Slab nella memoria heap

Nel kernel Linux, l'allocatore Slab è un meccanismo di gestione della memoria utilizzato per l'allocazione e la deallocazione efficiente di piccoli blocchi di memoria. Offre prestazioni mantenendo diverse cache di Slab, ciascuna contenente blocchi di memoria di dimensione fissa. Tipicamente, kmalloc-32 alloca 32 byte di memoria ed è uno slab kmalloc-32, mentre kmalloc-4k alloca 4096 byte di memoria ed è uno slab kmalloc-4k.[6]

Inoltre, l'allocazione a slab nel kernel Linux comporta tipicamente l'allocazione di memoria da uno spazio di indirizzi contiguo all'interno della regione di memoria heap del kernel. Questo indirizzo contiguo è gestito dal kernel e viene utilizzato per allocare memoria per vari oggetti e strutture dati del kernel. La Fig 2.2.1.1 mostra la disposizione degli slab nella memoria del kernel Linux.

img

Fig 2.2.1.1 Allocatore Slab in Linux [7] (L'autore di questa figura è https://leviathan.vip/)

3 Analisi tecnica della vulnerabilità

3.1 Proof of Concept

Se vuoi riprodurre il processo con un kernel Linux compilato da te, leggi i seguenti file markdown per ottenere le informazioni di contesto:

  1. Prima leggi il markdown su come compilare un kernel Linux: https://github.com/dcheng69/CVE-2022-0185-Case-Study/blob/main/compile_linux/compile.md
  2. Poi leggi il markdown su come preparare un file system RAM per eseguire il POC: https://github.com/dcheng69/CVE-2022-0185-Case-Study/blob/main/ramfs/ramfs.md
  3. Infine segui il markdown del poc: https://github.com/dcheng69/CVE-2022-0185-Case-Study/blob/main/Poc/poc.md

Nota:

Scarica lo strumento