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

More from OWASP Kyiv

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

More from OWASP Kyiv (19)

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

Ivan Vyshnevskyi - Not So Quiet Git Push