Перейти до вмісту

Уроки безпечного коду для GitHub

RansomLeak може залишити в pull request на GitHub коментар із посиланням на короткий урок безпечного коду, коли сканер повідомляє про слабке місце в ньому. Це безкоштовно, не потребує облікового запису RansomLeak і не пов’язане з налаштуваннями вашої організації в RansomLeak. Є два способи використання.

GitHub App GitHub Action
Що читає Сповіщення сканування коду GitHub Файл SARIF від вашого сканера
Приватні репозиторії Лише з GitHub Code Security Так, без Code Security
Фіксує завершення в pull request Так Лише якщо встановлено й App
Pull request із форків Наразі не підтримуються Наразі не підтримуються

Встановіть RansomLeak Secure Coding із GitHub Marketplace для свого облікового запису чи організації. Нічого налаштовувати не потрібно.

Для роботи потрібне активне сканування коду GitHub: публічні репозиторії або приватні з GitHub Code Security. Без цього App нічого читати, тож використовуйте Action.

Коли сканування коду знаходить тип проблеми, для якого є урок, App додає до pull request один коментар і надалі редагує саме його. У ньому до п’яти уроків, по одному на кожен окремий тип проблеми, кожен займає 5-10 хвилин. App також створює перевірку RansomLeak Secure Coding. Коли хтось завершує урок, App ставить позначку в коментарі.

Коментар RansomLeak у pull request, усі три уроки позначено як завершені

Коли коментар створено, перевірка має статус neutral, а коли всі перелічені уроки завершено, — success. Вона ніколи не завершується помилкою.

Перевірка RansomLeak Secure Coding у статусі success після завершення всіх уроків

Не робіть цю перевірку обов’язковою: pull request без уроків ніколи про неї не звітують.

Виправлення коду не прибирає урок із коментаря.

Додайте Action у workflow, який уже запускає сканер і записує SARIF. Він працює з CodeQL, Semgrep, Trivy, Gitleaks та іншими інструментами, правила яких мають CWE, CVE або GHSA, а також зі сканерами секретів.

permissions:
contents: read
pull-requests: write
id-token: write
steps:
- uses: actions/checkout@v4
# run your scanner and write results.sarif
- uses: ransomleak/secure-coding-action@v1
with:
sarif: results.sarif

Реєструватися чи додавати секрет не потрібно. id-token: write дозволяє Action підтвердити для RansomLeak, у якому репозиторії він працює.

Коментар відображає те, про що повідомляє ваш сканер, тож для меншого шуму запускайте його лише на змінених файлах або з базовим рівнем (baseline). Якщо результат SARIF має baselineState, враховуються лише результати new і updated.

Для параметра github-token використовуйте стандартний GITHUB_TOKEN. Якщо передати токен іншого облікового запису, коментар буде опубліковано від його імені, і кожен повторний запуск створюватиме новий коментар замість оновлення першого.

Action ніколи не завершує ваш workflow помилкою. Якщо RansomLeak недоступний або файл SARIF відсутній чи пошкоджений, він записує попередження й продовжує роботу. Pull request із форків наразі не підтримуються, бо GitHub дає таким запускам токен лише для читання й не дає токена OIDC.

Без App Action не може поставити позначку в коментарі чи створити перевірку. Щоб фіксувати завершення в pull request, встановіть і App. Якщо App встановлено для облікового запису, він публікує коментар, а Action нічого не додає. Якщо pull request почав з Action, а потім отримав App, або навпаки, у ньому може з’явитися другий коментар.

  • SQL-ін’єкції
  • Міжсайтовий скриптинг (XSS)
  • Обхід шляху (path traversal)
  • Ін’єкції команд
  • Підробка запитів на боці сервера (SSRF)
  • Секрети в коді
  • Зовнішні сутності XML (XXE)
  • Відкрите перенаправлення
  • Міжсайтова підробка запитів (CSRF)
  • Вразливі залежності

Для десеріалізації та слабкої криптографії уроків поки немає.

Знахідка зіставляється за її CWE. Знахідки сканерів секретів і рекомендації щодо залежностей зіставляються за типом сканера. Категорії OWASP і широкі батьківські CWE, як-от CWE-200, не використовуються, бо вони не вказують на один конкретний урок.

App читає сповіщення сканування коду, стан pull request і те, чи його автор є ботом. Action надсилає лише ідентифікатори: назву сканера, ідентифікатори CWE правил, що дали результат, ознаку того, що правило є рекомендацією CVE або GHSA, і номер pull request. Репозиторій і власник беруться з токена OIDC від GitHub.

Кожне посилання на урок містить токен з іменем власника репозиторію (для особистих репозиторіїв це ім’я користувача), назвою репозиторію, номером pull request, уроком і внутрішніми ідентифікаторами. Вони потрібні, щоб завершений урок потрапив до правильного pull request. Токен підписаний, але не зашифрований, тому будь-хто з посиланням може його декодувати й прочитати ці значення.

Вихідний код, шляхи до файлів і фрагменти не надсилаються. RansomLeak не зберігає персональних даних розробників. Видалення App видаляє запис про його встановлення. Якщо ви використовуєте лише Action, RansomLeak зберігає один запис власника лише з числовим ідентифікатором облікового запису GitHub, і служба підтримки видаляє його на запит. Див. політику конфіденційності.

Завершення не підтверджується

Section titled “Завершення не підтверджується”

Посилання на урок належить pull request, а не людині. Будь-хто, хто може відкрити pull request, може відкрити посилання й позначити урок завершеним. У публічному репозиторії це означає будь-кого.

Позначка означає, що урок завершено за цим посиланням. Сприймайте її як підказку, а не як доказ того, хто саме пройшов навчання.

  • Уроки англійською.
  • App працює лише з github.com.
  • Pull request із форків наразі не підтримуються.
  • Урок з’являється лише тоді, коли знахідка сканера має відповідний урок. Для знахідок без відповідного уроку коментаря немає, зокрема для знахідок лише з категорією OWASP.