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

More Related Content

PPTX
Як робити рефакторинг в продукті з бурхливою історією
PPTX
Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....
PPTX
Oleksandr Brychuk "UniSender architecture. Growth from 100kk to 1.5kkk letter...
PDF
Як прокачати трьох студентів за п’ять тижнів
PDF
Як прокачати трьох студентів за п’ять тижнів
PDF
Is there a penetration testing within PCI DSS certification? (Dmytro Diordiyc...
PPTX
Software Supply Chain Security та компоненти з відомими вразливостями
PPTX
Cloud Security Hardening та аудит хмарної безпеки за допомогою Scout Suite
Як робити рефакторинг в продукті з бурхливою історією
Багаті спадкоємці, або як робити рефакторинг у продукті з бурхливою історією....
Oleksandr Brychuk "UniSender architecture. Growth from 100kk to 1.5kkk letter...
Як прокачати трьох студентів за п’ять тижнів
Як прокачати трьох студентів за п’ять тижнів
Is there a penetration testing within PCI DSS certification? (Dmytro Diordiyc...
Software Supply Chain Security та компоненти з відомими вразливостями
Cloud Security Hardening та аудит хмарної безпеки за допомогою Scout Suite

More from OWASP Kyiv (19)

PDF
Threat Modeling with OWASP Threat Dragon
PDF
Anastasia Vixentael - Don't Waste Time on Learning Cryptography: Better Use I...
PDF
Vlad Styran - Cyber Security Economics 101
PDF
Pavlo Radchuk - OWASP SAMM: Understanding Agile in Security
PDF
Dima Kovalenko - Modern SSL Pinning
PDF
Yevhen Teleshyk - OAuth Phishing
PDF
Vlada Kulish - Why So Serial?
PDF
Vlad Styran - OWASP Kyiv 2017 Report and 2018 Plans
PDF
Roman Borodin - ISC2 & ISACA Certification Programs First-hand Experience
PDF
Ihor Bliumental - WebSockets
PPTX
Serhiy Korolenko - The Strength of Ukrainian Users’ P@ssw0rds2017
PDF
Viktor Zhora - Cyber and Geopolitics: Ukrainian factor
PPTX
Andriy Shalaenko - GO security tips
PPTX
Vlad Styran - "Hidden" Features of the Tools We All Love
PDF
Volodymyr Ilibman - Close Look at Nyetya Investigation
PDF
Ihor Bliumental - Collision CORS
PPTX
Lidiia 'Alice' Skalytska - Security Checklist for Web Developers
PDF
Ihor Bliumental – Is There Life Outside OWASP Top-10
PDF
Roman Rott – Ruby for Pentesters
Threat Modeling with OWASP Threat Dragon
Anastasia Vixentael - Don't Waste Time on Learning Cryptography: Better Use I...
Vlad Styran - Cyber Security Economics 101
Pavlo Radchuk - OWASP SAMM: Understanding Agile in Security
Dima Kovalenko - Modern SSL Pinning
Yevhen Teleshyk - OAuth Phishing
Vlada Kulish - Why So Serial?
Vlad Styran - OWASP Kyiv 2017 Report and 2018 Plans
Roman Borodin - ISC2 & ISACA Certification Programs First-hand Experience
Ihor Bliumental - WebSockets
Serhiy Korolenko - The Strength of Ukrainian Users’ P@ssw0rds2017
Viktor Zhora - Cyber and Geopolitics: Ukrainian factor
Andriy Shalaenko - GO security tips
Vlad Styran - "Hidden" Features of the Tools We All Love
Volodymyr Ilibman - Close Look at Nyetya Investigation
Ihor Bliumental - Collision CORS
Lidiia 'Alice' Skalytska - Security Checklist for Web Developers
Ihor Bliumental – Is There Life Outside OWASP Top-10
Roman Rott – Ruby for Pentesters
Ad

Ivan Vyshnevskyi - Not So Quiet Git Push