Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ivan Vyshnevskyi - Not So Quiet git push

OWASP Kyiv
December 03, 2017

Ivan Vyshnevskyi - Not So Quiet git push

Video: https://youtu.be/IOgaqMctP_g
OWASP Kyiv Winter 2017 Meetup, Dec 2, 2017
https://www.owasp.org/index.php/Kyiv

OWASP Kyiv

December 03, 2017
Tweet

More Decks by OWASP Kyiv

Other Decks in Technology

Transcript

  1. Відмова від відповідальності “They are not a security people, they’re

    a developer people […]” — Bryan Brake, подкаст “Brakeing Down Security” 2
  2. 3

  3. 4

  4. 5

  5. 6

  6. Ціль: статичний сайт • Персональний блог • Cайт-візитка • Документація

    для нашого F(L)OSS проекту • Сторінка для JavaScript експериментів 10
  7. Ціль: статичний сайт • Дешево • Мінімум інфраструктури • Легко

    оновлювати • Пишемо не чистий HTML (Markdown чи AsciiDoc) 11
  8. GitHub Pages v2.0 14 автор https://example.github.io ➀ зміни GitHub Travis

    CI ➃ хостинг ➂ генерація та публікація ➁ отримання змін
  9. Публікація з Travis CI 18 .travis.yml sudo: false script: -

    ./build.sh # генерує і коммітить в public - cd public - ???
  10. Публікація: спроба #3 35 git push --quiet $URL HEAD:gh-pages >

    /dev/null fatal: unable to access 'https://[email protected]/sai naen/hypothetical-blog/': Failed to connect to github.com port 443: Connection refused
  11. Публікація: спроба #3 36 git push --quiet $URL HEAD:gh-pages >

    /dev/null fatal: unable to access 'https://[email protected]/sai naen/hypothetical-blog/': Failed to connect to github.com port 443: Connection refused
  12. Публікація: ще варіанти? 38 • повний /dev/null git push $URL

    HEAD:gh-pages 2>&1 > /dev/null • credentials helper git config credential.helper 'store --file=.git/creds' • ~/.netrc echo "machine github.com login $LOGIN password $GH_TOKEN" > ~/.netrc
  13. Підсумок • Щоб працювати з git безпечно треба бути обережним

    ◦ Хороші рішення знайти так само легко як і погані • Доступні для всіх логи не спрощують задачу 39
  14. 2014 — Знайомство • Простий пошук по ‘git push https’

    • Перегляд вручну логів Результат: ~10 токенів (активних і ні) 44
  15. 2014 — Знайомство В одному з листів, я написав: “[This

    problem] doesn't seem to be very common […]” Ха! 46
  16. 2016 — Повернення 48 • Хочеться свій блог • Перший

    пост має бути про щось цікаве Проблема з git push
  17. 2016 — Повернення 49 • Всього 10 токенів якось малувато

    • Можливо за два роки все змінилось? • Потенційна шкода, якщо проблема більш поширена
  18. 2016 — Повернення 50 • Всього 10 токенів якось малувато

    • Можливо за два роки все змінилось? • Потенційна шкода, якщо проблема більш поширена Рішення: ще раз пройтись пошуком
  19. 2016 — Перші результати • 28 активних токенів • часткова

    автоматизація завантаження логів 52
  20. 2016 — Перші результати • 28 активних токенів • часткова

    автоматизація завантаження логів ◦ знаючи ім’я репозиторію, навіть якщо він «деактивований» на Travis CI, логи все ще можна отримати ◦ у випадку проблем з git push який знаходиться в after_success секції, білд залишається «зеленим» 53
  21. 2016 — Перші результати • 28 активних токенів • часткова

    автоматизація завантаження логів ◦ знаючи ім’я репозиторію, навіть якщо він «деактивований» на Travis CI, логи все ще можна отримати ◦ у випадку проблем з git push який знаходиться в after_success секції, білд залишається «зеленим» • ‘coordinated’ та інші види disclosure 54
  22. 2016 — Книга облич 58 • Можна писати статтю! :-)

    • Баг баунті? Вуд лов ту, бат… ◦ «Не можна зв’язуватися з працівниками з питань повідомлення безпосередньо або через інші канали.» ◦ Помилка вже виправлена
  23. 2016 — Книга облич 61 • Thank you for reporting

    this information to us. • After reviewing this issue, we have decided to award you a bounty of $X000.
  24. 2017 — Скан 66 JavaScript: робота з API Travis CI

    Bash: менджмент вводу/виводу ¯\_(ツ)_/¯
  25. 2017 — Скан: репозиторії 68 • популярні (>100 зірочок чи

    форків) • проекти відомих компаній (Google, Mozilla, Facebook, etc.)
  26. 2017 — Скан: репозиторії 69 • популярні (>100 зірочок чи

    форків) • проекти відомих компаній (Google, Mozilla, Facebook, etc.) • проекти топ-коммітерів до проектів зібраних раніше
  27. 2017 — Скан: репозиторії 71 • популярні (>100 зірочок чи

    форків) • проекти відомих компаній (Google, Mozilla, Facebook, etc.) • проекти топ-коммітерів до проектів зібраних раніше • проекти коммітерів до проектів топ-коммітерів
  28. 2017 — Скан: білди 72 Деякі проекти використовують Travis CI

    наповну • інколи десятки тисяч білдів • кожен білд має десятки джоб логів
  29. 2017 — Скан: білди 73 • тільки останні 3000 білдів

    • не більше 10 логів на білд ◦ завжди останній та перший ◦ 8 випадкових
  30. 2017 — Скан: час 74 • ~4 місяці ◦ щоб

    не забанили мій сервер ◦ не створювати проблем для безкоштовного сервісу
  31. 2017 — Скан: час 75 • ~4 місяці ◦ щоб

    не забанили мій сервер ◦ не створювати проблем для безкоштовного сервісу • дуже важко не сидіти і тупо дивитись як біжать рядочки
  32. 2017 — Скан: час 76 • ~4 місяці ◦ щоб

    не забанили мій сервер ◦ не створювати проблем для безкоштовного сервісу • дуже важко не сидіти і тупо дивитись як біжать рядочки • постійний збір нових «цілей»
  33. Хвилинка статистики (1) 78 Скан • 7.8 мільйонів репозиторіїв на

    326 мовах • 320 тис. з них мали хоча б один білд на Travis CI ~4.1%! • 60 мільйонів білдів
  34. Хвилинка статистики (2) 79 Результати • 150 тис. білдів в

    яких щось знайшлись ~0.24% від усіх • 2.6 тис. унікальних токенів • 907 активних токенів (34%)
  35. 81

  36. 83

  37. 84

  38. 85

  39. 86

  40. 87

  41. 88

  42. 89

  43. 90

  44. 91

  45. 92

  46. 93

  47. 94

  48. 95

  49. 96

  50. 97

  51. 98

  52. 99

  53. 100

  54. 101

  55. 102

  56. 103

  57. 104

  58. 105

  59. 106

  60. 107

  61. 108

  62. 109

  63. 110

  64. 111

  65. 112

  66. Disclosure: а чому не… 117 • git-security@ • Travis CI

    • GitHub Security • напряму власникам
  67. Disclosure: моменти 120 • виявилось, це займає дуже багато часу

    • важко визначити кому писати • Google Security Team — круті
  68. Висновки 122 • “given enough eyeballs, all bugs are shallow”

    — не працює, токени в логах були роками навіть у великих проектів
  69. Висновки 123 • “given enough eyeballs, all bugs are shallow”

    — не працює, токени в логах були роками навіть у великих проектів • якщо програма поводиться несподівано, документацію не прочитають
  70. Висновки 124 • “given enough eyeballs, all bugs are shallow”

    — не працює, токени в логах були роками навіть у великих проектів • якщо програма поводиться несподівано, документацію не прочитають • копі-паста коду з Інтернету, як завжди, не допомогає
  71. PPS. Виправимо git-push! - error(_("failed to push some refs to

    '%s'"), transport->url); + error(_("failed to push some refs to '%s'"), transport_anonymize_url(transport- >url)); “This leaks the return value.” :-( 127