
Технический анализ и эксплойт доказательства концепции для CVE-2025-61228, уязвимости повышения привилегий в механизме автоматического обновления SuperDuper!, с подробным разбором вектора атаки и рекомендациями по смягчению последствий.
Эта проблема, похоже, хуже, чем предполагает разработчик, поэтому я не хочу, чтобы эта часть затерялась в деталях. Разработчик отметил в своем блоге:
Это может произойти только в том случае, если программа, работающая на вашей системе, ищет SuperDuper для выполнения обновления, настоящее обновление представлено законными средствами, и вы нажимаете «Обновить».
На самом деле это неверно: для эксплуатации этой уязвимости не требуется, чтобы настоящее обновление было представлено законными средствами. Никогда, ни при каких обстоятельствах не принимайте обновление, предоставленное SuperDuper 3.10 и более старыми версиями! Я объясняю это более подробно ниже.
Также важно понимать, что эта уязвимость не ограничивается повышением привилегий, она также включает обход контроля конфиденциальности. Эта деталь, похоже, была опущена в сообщении разработчика в блоге.
Из блога разработчика:
Наш механизм автоматического обновления может быть перехвачен и вынужден установить пакет, который не является SuperDuper.
Несмотря на то, что мы подписали и нотариально заверили наш установочный пакет, Gatekeeper не проверяет эту нотариальную заверку при установке установщиком пакетов macOS. Таким образом, загрузка может быть изменена, и мы бы установили это вместо оригинала. Поскольку установка выполняется с повышенными привилегиями, это может позволить вредоносной программе третьего лица, которую вы также должны были бы установить, получить доступ администратора к вашей системе.
Из CVE:
Проблема в Shirt Pocket SuperDuper! V.3.10 и более ранних версиях позволяет локальному злоумышленнику выполнить произвольный код через механизм обновления программного обеспечения.
Этот автор не является первооткрывателем уязвимости, которого разработчик SuperDuper идентифицирует как «анонимный исследователь безопасности». Я не претендую на заслугу в обнаружении этой уязвимости, я просто проявил интерес к её техническому анализу.
Оценка CVSS 3.1: 7.8 High (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Чтобы избежать этой уязвимости, либо удалите приложение SuperDuper!, либо примените обновление 3.11.
Предупреждение: Вы должны загрузить обновление непосредственно с сайта разработчика, чтобы избежать этой уязвимости.
Этот анализ эксплойта и доказательство концепции предоставлены только в образовательных целях. Используйте их на свой страх и риск.
Вместо того чтобы реализовать решение для обновления программного обеспечения с открытым исходным кодом, протестированное сотнями разработчиков и специалистов по безопасности, разработчики SuperDuper создали собственный механизм обновления программного обеспечения, построенный на небезопасных сценариях оболочки, которые выполняются с правами root и имеют полный доступ к диску. Не проверяя подлинность устанавливаемого программного обеспечения во время обновления, SuperDuper обманом заставляют установить программное обеспечение злоумышленника. Исправление разработчика устраняет только аспект аутентификации этой уязвимости, но не устраняет внутренние уязвимости, возникающие в результате использования сценариев оболочки для упрощения процесса обновления.
Комментарий разработчика «Gatekeeper не проверяет эту нотариальную заверку» вводит в заблуждение. GateKeeper вступает в игру, когда вы пытаетесь открыть что-то, загруженное в браузере, но это неприменимо к внутреннему механизму обновления программного обеспечения приложения. На 100% ответственность разработчика – проверять все, что его программное обеспечение загружает и устанавливает на ваш компьютер – не позволяйте этому разработчику обмануть вас, заставив поверить, что это сбой GateKeeper. Переходя к сути эксплойта, злоумышленник может обманом заставить SuperDuper установить альтернативный пакет, и это происходит с повышенными привилегиями. Предположительно, он также будет выполняться с полным доступом к диску, потому что SuperDuper требует полного доступа к диску для любых действий.
В блоге разработчика также говорится:
Это может произойти только в том случае, если программа, работающая на вашей системе, ищет SuperDuper для выполнения обновления, настоящее обновление представлено законными средствами, и вы нажимаете «Обновить».
С этим комментарием я предположил, что, вероятно, невозможно воспроизвести этот эксплойт, потому что он должен включать изменения на стороне сервера в механизме обновления, которые были бы сделаны одновременно с публикацией патча 3.11. Другими словами, чтобы предотвратить воздействие этой уязвимости на более старые версии программного обеспечения, они, конечно, отключили механизм обновления, верно? Ну... Я загрузил более старую версию SuperDuper, и когда я открыл её, меня сразу же встретило уведомление об обновлении† – в одном клике от потенциального эксплойта. Я нашел это очень интригующим – как кто-либо, использующий более старую версию приложения, будет защищен от этой уязвимости, если механизм автоматического обновления не отключен? (это связано с «предупреждением», которое я упомянул в начале этой статьи, я вернусь к этому вопросу в конце)
† Вроде того... Результат оказался очень неловким. Не было ни описания обновления, ни уведомления о безопасности, окно было просто пустым с кнопками «Пропустить» и «Обновить». Таким образом, более старые пользователи не только не защищены от эксплойта из-за того, что механизм обновления не отключен, но они также не информируются о проблеме через механизм обновления.
Я двинулся дальше. Когда вы применяете обновление, внутренние механизмы полезно регистрируются в журнале SuperDuper, поэтому мы начнем с этого, чтобы увидеть, как это работает:
Transcript : UpgradeTranscript.plist
Ext Logging : Disabled
PHASE: 1. Upgrade Application
...ACTION: Downloading upgrade package
......COMMAND => Downloading update package...
......COMMAND => Preparing update package
...ACTION: Installing upgrade package
......COMMAND => Preserving SDAgent owner and mode bits
......COMMAND => Installing upgrade package
installer[3148] <Debug>: Product archive /tmp/SuperDuper!.pkg trustLevel=350
Многие приложения для Mac, не входящие в Mac App Store, используют фреймворк Sparkle с открытым исходным кодом для (безопасного) управления обновлениями программного обеспечения. Только не SuperDuper. Здесь мы видим, что они создали свой собственный, и это отличный пример того, почему это часто плохой выбор. Механизмы обновления программного обеспечения являются основными целями для эксплойтов, поэтому для их защиты требуется много времени и опыта. «UpgradeTranscript.plist» – это ссылка на файл внутри приложения SuperDuper, который содержит серию команд Терминала, которые SuperDuper использует для загрузки и применения обновления:
cat /Applications/SuperDuper\!.app/Contents/Resources/Transcripts/UpgradeTranscript.plist
<?xml version="1.0" encoding="UTF-8"?>
...
/usr/bin/curl SDHTTPproxy.Host --silent --show-error --output /tmp/superduper.tar.gz -L SDdownloadURL
cd /tmp; if [ -d superduper_install ]; then /bin/rm -rf superduper_install; fi; /bin/mkdir superduper_install; /usr/bin/tar xzf superduper.tar.gz; /bin/rm /tmp/superduper.tar.gz; if [ -d '/Library/Receipts/SuperDuper!.pkg' ]; then /bin/rm -rf '/Library/Receipts/SuperDuper!.pkg'; fi;
/usr/sbin/installer -allow -verboseR -dumplog -pkg '/tmp/SuperDuper!.pkg' -target / >&1 2>&1;
if [ ! -d '/tmp/superduper_install/SuperDuper!.app' ]; then /usr/bin/ditto -rsrc '/Applications/Utilities/SuperDuper!.app' '/tmp/superduper_install/SuperDuper!.app'; fi