Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ivan Vyshnevskyi - Not So Quiet Git Push

123 views

Published on

Ivan Vyshnevskyi - Not So Quiet Git Push

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Ivan Vyshnevskyi - Not So Quiet Git Push

  1. 1. Not so Quiet git push All your repository are belong to us
  2. 2. Відмова від відповідальності “They are not a security people, they’re a developer people […]” — Bryan Brake, подкаст “Brakeing Down Security” 2
  3. 3. 3
  4. 4. 4
  5. 5. 5
  6. 6. 6
  7. 7. 7 Модель загроз
  8. 8. План I. Проблема II. Історія III.Результати 8
  9. 9. I. Проблема 9
  10. 10. Ціль: статичний сайт ● Персональний блог ● Cайт-візитка ● Документація для нашого F(L)OSS проекту ● Сторінка для JavaScript експериментів 10
  11. 11. Ціль: статичний сайт ● Дешево ● Мінімум інфраструктури ● Легко оновлювати ● Пишемо не чистий HTML (Markdown чи AsciiDoc) 11
  12. 12. GitHub Pages 12
  13. 13. GitHub Pages v1.0 13 автор https://example.github.io ➀ зміни ➂ хостинг GitHub ➁ генерація (Jekyll)
  14. 14. GitHub Pages v2.0 14 автор https://example.github.io ➀ зміни GitHub Travis CI ➃ хостинг ➂ генерація та публікація ➁ отримання змін
  15. 15. GitHub Pages: Auth 15
  16. 16. GitHub Pages: Auth 16
  17. 17. GitHub Pages: Auth 17
  18. 18. Публікація з Travis CI 18 .travis.yml sudo: false script: - ./build.sh # генерує і коммітить в public - cd public - ???
  19. 19. Публікація: спроба #1 19 .travis.yml:L5 - git push https://$GH_TOKEN@github.com/$TRAVIS_REPO_SLUG HEAD:gh-pages
  20. 20. Публікація: спроба #1 20
  21. 21. Публікація: спроба #1 21
  22. 22. Публікація: спроба #1 22
  23. 23. git push до v2.9.3 виводить повний URL 23
  24. 24. Публікація: спроба #2 24
  25. 25. Публікація: спроба #2 25 man git-push
  26. 26. Публікація: спроба #2 26 .travis.yml:L5 - git push --quiet https://$GH_TOKEN@github.com/$TRAVIS_REPO_SLUG HEAD:gh-pages
  27. 27. Публікація: спроба #2 27
  28. 28. Публікація: спроба #2 28
  29. 29. Публікація: спроба #2 29
  30. 30. Публікація: спроба #2 30
  31. 31. Публікація: спроба #2 31 man git-push #again
  32. 32. git push усіх версії виводить повний URL при помилці 32
  33. 33. Публікація: спроба #3 33
  34. 34. Публікація: спроба #3 34 .travis.yml:L5 - git push --quiet https://$GH_TOKEN@github.com/$TRAVIS_REPO_SLUG HEAD:gh-pages > /dev/null
  35. 35. Публікація: спроба #3 35 git push --quiet $URL HEAD:gh-pages > /dev/null fatal: unable to access 'https://df479efa868fbb679ce954fad0ce2c7c3dffd92e@github.com/sai naen/hypothetical-blog/': Failed to connect to github.com port 443: Connection refused
  36. 36. Публікація: спроба #3 36 git push --quiet $URL HEAD:gh-pages > /dev/null fatal: unable to access 'https://df479efa868fbb679ce954fad0ce2c7c3dffd92e@github.com/sai naen/hypothetical-blog/': Failed to connect to github.com port 443: Connection refused
  37. 37. git push усіх версії виводить помилки в stderr, не stdout 37
  38. 38. Публікація: ще варіанти? 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
  39. 39. Підсумок ● Щоб працювати з git безпечно треба бути обережним ○ Хороші рішення знайти так само легко як і погані ● Доступні для всіх логи не спрощують задачу 39
  40. 40. II. Історія 40
  41. 41. 2014 — Знайомство 41
  42. 42. 2014 — Знайомство 42
  43. 43. 2014 — Знайомство ● Простий пошук по ‘git push https’ ● Перегляд вручну логів 43
  44. 44. 2014 — Знайомство ● Простий пошук по ‘git push https’ ● Перегляд вручну логів Результат: ~10 токенів (активних і ні) 44
  45. 45. 2014 — Знайомство В одному з листів, я написав: “[This problem] doesn't seem to be very common […]” 45
  46. 46. 2014 — Знайомство В одному з листів, я написав: “[This problem] doesn't seem to be very common […]” Ха! 46
  47. 47. 2016 — Повернення 47 ● Хочеться свій блог ● Перший пост має бути про щось цікаве
  48. 48. 2016 — Повернення 48 ● Хочеться свій блог ● Перший пост має бути про щось цікаве Проблема з git push
  49. 49. 2016 — Повернення 49 ● Всього 10 токенів якось малувато ● Можливо за два роки все змінилось? ● Потенційна шкода, якщо проблема більш поширена
  50. 50. 2016 — Повернення 50 ● Всього 10 токенів якось малувато ● Можливо за два роки все змінилось? ● Потенційна шкода, якщо проблема більш поширена Рішення: ще раз пройтись пошуком
  51. 51. 2016 — Перші результати ● 28 активних токенів 51
  52. 52. 2016 — Перші результати ● 28 активних токенів ● часткова автоматизація завантаження логів 52
  53. 53. 2016 — Перші результати ● 28 активних токенів ● часткова автоматизація завантаження логів ○ знаючи ім’я репозиторію, навіть якщо він «деактивований» на Travis CI, логи все ще можна отримати ○ у випадку проблем з git push який знаходиться в after_success секції, білд залишається «зеленим» 53
  54. 54. 2016 — Перші результати ● 28 активних токенів ● часткова автоматизація завантаження логів ○ знаючи ім’я репозиторію, навіть якщо він «деактивований» на Travis CI, логи все ще можна отримати ○ у випадку проблем з git push який знаходиться в after_success секції, білд залишається «зеленим» ● ‘coordinated’ та інші види disclosure 54
  55. 55. 2016 — Книга облич exec('git clone '+ 'https://$GH_TOKEN@github.com/'+repoSlug+' '+ factsFolder); // ... exec('git push origin'); 55
  56. 56. 2016 — Книга облич 56 ● Можна писати статтю! :-)
  57. 57. 2016 — Книга облич 57 ● Можна писати статтю! :-) ● Баг баунті? Офкорс!
  58. 58. 2016 — Книга облич 58 ● Можна писати статтю! :-) ● Баг баунті? Вуд лов ту, бат… ○ «Не можна зв’язуватися з працівниками з питань повідомлення безпосередньо або через інші канали.» ○ Помилка вже виправлена
  59. 59. 2016 — Книга облич 59 ● Thank you for reporting this information to us.
  60. 60. 2016 — Книга облич 60 ● Thank you for reporting this information to us.
  61. 61. 2016 — Книга облич 61 ● Thank you for reporting this information to us. ● After reviewing this issue, we have decided to award you a bounty of $X000.
  62. 62. 2016 — Книга облич 62 … award you a bounty of $X000
  63. 63. 2016 — Книга облич 63
  64. 64. 2016 — Книга облич 64
  65. 65. 2017 — Скан 65
  66. 66. 2017 — Скан 66 JavaScript: робота з API Travis CI Bash: менджмент вводу/виводу ¯_(ツ)_/¯
  67. 67. 2017 — Скан: репозиторії 67 ● популярні (>100 зірочок чи форків)
  68. 68. 2017 — Скан: репозиторії 68 ● популярні (>100 зірочок чи форків) ● проекти відомих компаній (Google, Mozilla, Facebook, etc.)
  69. 69. 2017 — Скан: репозиторії 69 ● популярні (>100 зірочок чи форків) ● проекти відомих компаній (Google, Mozilla, Facebook, etc.) ● проекти топ-коммітерів до проектів зібраних раніше
  70. 70. 2017 — Скан: репозиторії 70
  71. 71. 2017 — Скан: репозиторії 71 ● популярні (>100 зірочок чи форків) ● проекти відомих компаній (Google, Mozilla, Facebook, etc.) ● проекти топ-коммітерів до проектів зібраних раніше ● проекти коммітерів до проектів топ-коммітерів
  72. 72. 2017 — Скан: білди 72 Деякі проекти використовують Travis CI наповну ● інколи десятки тисяч білдів ● кожен білд має десятки джоб логів
  73. 73. 2017 — Скан: білди 73 ● тільки останні 3000 білдів ● не більше 10 логів на білд ○ завжди останній та перший ○ 8 випадкових
  74. 74. 2017 — Скан: час 74 ● ~4 місяці ○ щоб не забанили мій сервер ○ не створювати проблем для безкоштовного сервісу
  75. 75. 2017 — Скан: час 75 ● ~4 місяці ○ щоб не забанили мій сервер ○ не створювати проблем для безкоштовного сервісу ● дуже важко не сидіти і тупо дивитись як біжать рядочки
  76. 76. 2017 — Скан: час 76 ● ~4 місяці ○ щоб не забанили мій сервер ○ не створювати проблем для безкоштовного сервісу ● дуже важко не сидіти і тупо дивитись як біжать рядочки ● постійний збір нових «цілей»
  77. 77. III. Результати 77
  78. 78. Хвилинка статистики (1) 78 Скан ● 7.8 мільйонів репозиторіїв на 326 мовах ● 320 тис. з них мали хоча б один білд на Travis CI ~4.1%! ● 60 мільйонів білдів
  79. 79. Хвилинка статистики (2) 79 Результати ● 150 тис. білдів в яких щось знайшлись ~0.24% від усіх ● 2.6 тис. унікальних токенів ● 907 активних токенів (34%)
  80. 80. 907 Активних токенів 80
  81. 81. 81
  82. 82. 82 цікаві проекти
  83. 83. 83
  84. 84. 84
  85. 85. 85
  86. 86. 86
  87. 87. 87
  88. 88. 88
  89. 89. 89
  90. 90. 90
  91. 91. 91
  92. 92. 92
  93. 93. 93
  94. 94. 94
  95. 95. 95
  96. 96. 96
  97. 97. 97
  98. 98. 98
  99. 99. 99
  100. 100. 100
  101. 101. 101
  102. 102. 102
  103. 103. 103
  104. 104. 104
  105. 105. 105
  106. 106. 106
  107. 107. 107
  108. 108. 108
  109. 109. 109
  110. 110. 110
  111. 111. 111
  112. 112. 112
  113. 113. 113 158 тис. репозиторіїв з комміт-доступом
  114. 114. 114 20 тис. приватних репозиторіїв
  115. 115. disclosure 115
  116. 116. Disclosure: порядок 116 1. газети/журнали/онлайн видання 2. державні організації 3. великі компанії 4. індивідуальні розробники
  117. 117. Disclosure: а чому не… 117 ● git-security@ ● Travis CI ● GitHub Security ● напряму власникам
  118. 118. Disclosure: моменти 118 ● виявилось, це займає дуже багато часу
  119. 119. Disclosure: моменти 119 ● виявилось, це займає дуже багато часу ● важко визначити кому писати
  120. 120. Disclosure: моменти 120 ● виявилось, це займає дуже багато часу ● важко визначити кому писати ● Google Security Team — круті
  121. 121. Disclosure: фінал 121
  122. 122. Висновки 122 ● “given enough eyeballs, all bugs are shallow” — не працює, токени в логах були роками навіть у великих проектів
  123. 123. Висновки 123 ● “given enough eyeballs, all bugs are shallow” — не працює, токени в логах були роками навіть у великих проектів ● якщо програма поводиться несподівано, документацію не прочитають
  124. 124. Висновки 124 ● “given enough eyeballs, all bugs are shallow” — не працює, токени в логах були роками навіть у великих проектів ● якщо програма поводиться несподівано, документацію не прочитають ● копі-паста коду з Інтернету, як завжди, не допомогає
  125. 125. Дякую за увагу 125 hi@sainaen.com @sainaen Іван Вишневський
  126. 126. PS. Не git push єдиним ● set -x ● git remote -v ● echo 126
  127. 127. 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

×