🧑‍💻Cyber.vision🧑‍💻
466 subscribers
170 photos
12 videos
20 files
145 links
Python tips and tricks
The Good, Bad and the Ugly
متخصص امنیت شبکه های کنترل صنعتی
👨‍💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)
https://t.me/Hacker0x01
Download Telegram
#regreSSHion #OpenSSH #CVE-2024-6387
اخیرا برنامه OpenSSH که استفاده گسترده ای در پروتکل SSH دارد، دارای یک آسیب پذیری شرایط رقابتی یا Race Condition شده است.

این آسیب پذیری از نسخه 8.5p1 => 9.8p1 که در برابر signal handler آسیب پذیری Race Condition رخ خواهد داد، که به زبان ساده میشود اینکه در یک بازه زمانی مشخص، چندین Thread موازی تلاش میکنند در یک منطقه حافظه برخی فرایند خواندن و برخی فرایند نوشتن را انجام دهند.

اینجا تقدم و تأخر لحظه استفاده و لحظه چک بهم خواهد خورد و آسیب پذیری این امکان رو خواهد داد که شما از 200 درخواست یا Request ارسالی چند مورد رو به اشتباه مجوز تایید بگیرید.

خب حالا نحوه رخداد آسیب پذیری چطور بوده؟ این آسیب پذیری بر روی سیستم عامل های لینوکسی که از کتابخونه glibc بهره میگیرند، قابل بهره برداری است.

چرا که تابع syslog خود تابع async-signal-unsafe را فراخوانی میکند که این تابع از malloc و free برای تخصیص حافظه استفاده میکند که در منطقه سیستم است لذا سطح دسترسی نیز root خواهد بود، همچنین در تابع main_sigchld_handler شرط آسیب قرار دارد.
مقدار صفر برای argc در برنامه‌های لینوکسی. چرا و چگونه؟

همه چیز از بررسی CVE-2021-4034 و کامپایل مجدد PolKit بر روی Ubuntu 22.04 شروع شد! تصمیم داشتم یک نسخه‌ی آسیب‌پذیر PolKit رو با فعال کردن Debug Symbols کامپایل کرده و مراحل کامل این CVE رو در GDB بررسی کنم. به صورت خلاصه بگم که این آسیب‌پذیری در باینری pkexec وجود دارد و به کمک آن می‌توان LPE انجام داد. یکی از شرایط استفاده از این آسیب‌پذیری این است که در زمان اجرای pkexec شرط argc==0 برقرار باشد که از طریق آن متغیرهای محلی خوانده شده و بتوان یک library مخرب را بارگذاری نمود.

از آنجایی که pkexec علاوه بر لینوکس بر روی Solaris, BSD هم قابل استفاده است، در مقاله‌ی اصلی این CVE که توسط Qualys Security منتشر شده است متن زیر مشاهده می‌شود که از الزام argc==0 برای امکان‌پذیر بودن این LPE خبر می‌دهد.
OpenBSD is not exploitable, because its kernel refuses to execve() a program if argc is 0

پس فرض من این بود که در نسخه‌های اخیر لینوکس هم با کامپایل PolKit باید بتوان این آسیب‌پذیری را تست کرد. این بود که بر روی Ubuntu 22.04 یک نسخه‌ی آسیب‌پذیر را کامپایل کرده و یک کد ساده به صورت زیر نوشتم که pkexec را اجرا کرده و argc==0 برقرار باشد.

void main() {
char *args[] = { NULL };
char *envs[] = {"SHELL=/bin/bash", 0};
execve("pkexec", args, envs);
}

با اجرای برنامه و زدن strace مشاهده شد که فراخوانی در سطح user طبق انتظار انجام شد.
execve("pkexec", [], 0x7ffe3883b200 /* 1 var */)

ولی دو تا مورد عجیب رخ داد. اول اینکه برنامه در gdb بر خلاف انتظار با argc==1‌ اجرا شده و argv[0] که اسم برنامه در آن قرار می‌گیرد و طبق مدل فراخوانی باید NULL می‌بود برابر “” شده بود. مورد دومی که عجیب بود پیام زیر در dmesg بود.
process 'exploit' launched 'pkexec' with NULL argv: empty string added

با رسیدن به این مرحله به سراغ Ubuntu 20.04 رفتم و همین کد را بر روی آن اجرا کردم که همه چیز طبق انتظار رخ داده و در gdb با رسیدن به main برنامه‌ی pkexec مقدار argc==0 برقرار بوده و امکان تست CVE وجود داشت. اینجا واضح بود که در کرنل‌های جدید لینوکس در فراخوانی سیستمی execve تغییراتی اعمال شده است که جلوی اجرای برنامه‌ها با argc==0 گرفته شود. اینجا دیگه لازم بود کد کرنل چک شود!

با رفتن به github‌ و بررسی فایل fs/exec.c کرنل لینوکس مشاهده شد که در تابع اجرای فراخوانی سیستمی execve کد زیر در March 2022 اضافه شده که جلوی اجرای برنامه‌ها با argc==0 را می‌گیرد.

/*
* When argv is empty, add an empty string ("") as argv[0] to
* ensure confused userspace programs that start processing
* from argv[1] won't end up walking envp. See also
* bprm_stack_limits().
*/
if (bprm->argc == 0) {
retval = copy_string_kernel("", bprm);
if (retval < 0)
goto out_free;
bprm->argc = 1;
}

پس از این به بعد علاوه بر OpenBSD بر روی لینوکس نیز امکان اجرای آسیب‌پذیری‌های این مدلی وجود نخواهد داشت! :-D
پ.ن: در آینده‌ یک ویدئو از شیوه‌ی کامل اجرای این CVE منتشر می‌کنم.

#linux #kernel #CVE #PolKit #pkexec #execve
🥴3
This media is not supported in your browser
VIEW IN TELEGRAM
#CVE-2025-29927 #Node.js
آسیب پذیری #Bypass_Authorization برای Node.js روی یکی از سایت های برگزار کننده دوره های امنیتی که بواسطه اکسپلویت زیر کشف شد و البته در ویدیو نیز بصورت دستی تست انجام شده است.

این آسیب پذیری ظرفیت دور زدن هر صفحه ای که دارای کنترل سطح دسترسی هست رو داره، اما در تصویر مربوطه هدف بیرون کشیدن اطلاعات حساس نبوده و صرفا گوش زد وجود یک آسیب پذیری بوده است.

https://gist.github.com/a9v8i/91b3f669c1b1927b540a54cbcc8481a5
#CVE-2025-29927 #Bypass_Authorization
آسیب پذیری Bypass Authorization که برای Next.js در نسخه های زیر 13.5.6 و 14.2.25 و 15.2.3 آمده است.

ماجرا از این قرار که Middleware های طراحی شده در Next.js امکان اعمال تغییر در درخواست دریافتی را دارند، قبل از اینکه پارسر کد درخواست رو تحویل بگیره.

دور زدن مکانیزم کنترل سطح دسترسی یا Authorization زمانی انجام میشود که در درخواست ارسالی Header با نام x-middleware-subrequest تنظیم شده که بدان معنی است درخواست به Middleware تحویل داده شود و در شرط خط 707 اومده که زمانی که نام middleware در آرایه subrequests قرار داشته باشه پاسخ از نوع ()NextResponse.next برگشت داده شده و عملیات همزمان با ()Promise.resolve ادامه پیدا خواهد کرد.

اگر Header با نام x-middleware-subrequest تعریف شده باشه، Middleware بررسی امنیتی رو نادیده گرفته و درخواست رو به مقصد اصلی هدایت خواهد کرد که اینجا آسیب پذیری رخ خواهد داد.

مقدار MiddlewareInfo.name میتونه بدست بیاد و مسیر Middleware امکان تشخیص رو داشته چرا که در مسیریابی pages و با نام middleware.ts_ قرار داشته است.
👍1
#CVE-2025-30397 #JScript #UAF
تشریح اکسپلویتی برای مرورگر هایی که از موتور اجرایی JScript.dll استفاده میکنند مانند IE 11 ویندوز.

تکنیک اول: تعریف 16 بیت NOP برای ابتدای Shellcode اصلی، دوم تعریف Shellcode بصورت unescape.

تکنیک دوم: ایجاد یک حلقه for برای اجرای تکنیک Heap Spray در حافظه Heap برای ایجاد یک فضای مناسب که بتوان در ارجاع دوم Pointer، اقدام به بازنویسی Shellcode کرده برای اجرا.

یک Element از نوع iframe ساخته میشود، و src میشود به about:blank ، اینجا یک حافظه Heap رزرو خواهد شد.

به body آن sprayTarget وصل شده، و یک حلقه for ساخته شده و داخل اون try زده شده و درون اون contentWindow میاد یک کد JS رو در eval اجرا خواهد کرد.

در تابع eval یک کد JS که final درش هست که final حاوی shellcode بوده، اجرا میشود، همچنین در ادامه یک حلقه for دیگر تعریف شده که تگ div یک obj تعریف شده که با innerHTML یک Spray نیز اینجا انجام میشود.

در انتها دقت کنید، تگ object دوباره در victim تعریف شده و باز به body اتچ شده است، اینجا UAF رخ خواهد داد و شلکد قبلا نوشته شده اجرا میشود.
1