
Крадіжка токена GitHub одним кліком через баг у VSCode
Дослідник описав атаку, яка одним кліком по посиланню викрадає токен GitHub із правом читання й запису до репозиторіїв, зокрема приватних; проблема у вебверсії VSCode, виправлення Microsoft вийшли 3 червня.
Дослідник у сфері безпеки опублікував деталі атаки, яка одним кліком по посиланню викрадає токен доступу GitHub — той, що дає право читати й записувати до репозиторіїв жертви, зокрема приватних — через помилку у вебверсії Visual Studio Code. Матеріал з'явився в блозі дослідника та в трекері помилок VSCode 2 червня.
Помилка в ізоляції
Ціль — github.dev, браузерний редактор GitHub: відкриття будь-якого репозиторію там передає вебзастосунку OAuth-токен, який github.com надсилає до github.dev. Цей токен не обмежений репозиторієм, який ви відкрили, тож дає доступ до всіх інших репозиторіїв, доступних авторизованому користувачеві. Зазвичай VSCode тримає код усередині своїх webview (попередній перегляд Markdown, ноутбуки Jupyter) в iframe з іншим походженням, ізольовано від головного редактора. Помилка в тому, що webview передають події клавіатури батьківському вікну через API обміну повідомленнями VSCode, тому скрипт у недовіреному webview може імітувати натискання клавіш, які редактор сприймає як дії користувача.
Від комірки ноутбука до викраденого токена
Для демонстрації потрібен лише репозиторій із ноутбуком Jupyter і «локальним розширенням робочого простору». Комірка Markdown, у тега зображення якої обробник onerror запускає JavaScript, починає ланцюжок: скрипт чекає на повідомлення VSCode про рекомендовані розширення, надсилає Ctrl+Shift+A, щоб підтвердити його основну дію, і встановлює локальне розширення — шлях, який оминає перевірку довіри до видавця, бо сам робочий простір вважається довіреним. Далі це розширення додає власне сполучення клавіш, яке викликає команду встановлення вибраного розширення з маркетплейсу з пропуском перевірки видавця; встановлене розширення зчитує токен GitHub і звертається до api.github.com/user/repos, показуючи приватні репозиторії, доступні цьому токену. Та сама помилка існує і в настільній версії VSCode, але використати її складніше: жертва має клонувати репозиторій і відкрити ноутбук, а в поєднанні з XSS у webview це вже означало б віддалене виконання коду.
Виправлення та поради
3 червня Microsoft випустила тимчасове виправлення: у вебредакторі з'явився крок підтвердження під час відкриття ноутбуків, а команди більше не можуть оминати довіру до видавця. Того ж дня вийшло повніше виправлення, яке зупиняє поширення подій keydown із webview ноутбуків. Користувачам, які ніколи не відкривали github.dev, радять видалити його cookies і дані сайту — після початкового діалогу входу, зазначає дослідник, редактор не захищають жодні CSRF-токени, тож будь-яке посилання в інтернеті може перекинути браузер в атаку. Автор також віддає належне багаторівневому захисту VSCode — суворій політиці безпеки вмісту та очищенню Markdown — за обмеження шкоди й пояснює рішення про публічне розкриття: попередній звіт виправили мовчки, без згадки про дослідника.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.