The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Инцидент в сервисе непрерывной интеграции Travis CI

09.04.2018 11:35

Разработчики сервиса непрерывной интеграции Travis CI раскрыли сведения об инциденте с повреждением инфраструктуры проекта 13 марта, в результате которого случайно была инициирована операция удаления всех таблиц из СУБД. В течение 30 минут после удаления сервис оставался доступен с повреждёнными данными, после чего был отключен на пять с половиной часов для проведения восстановления.

После восстановления всплыл неожиданный эффект - пользователи которые подключились к сервису за те 30 минут, что база оставалась повреждена, оказались подключенными под совсем другими аккаунтами. Подобный эффект объясняется тем, что для пользователей, которые вошли при пустой БД, были созданы новые записи и первичные ключи (данные в Travis CI синхронизируются с GitHub).

После восстановления новые токены аутентификации не были очищены и стали указывать на совсем другие записи (в PosgreSQL идентификатор последовательности (sequences) не был сброшен и созданные при пустой базе записи стали указывать на новые записи, созданные после восстановления). После того как проблема была замечена, разработчики Travis CI примерно через сутки после очистки БД удалили проблемные токены. По логу всего один пользователь успел подключиться к чужим данным. Тем не менее, всем пользователям, для которых было обнаружено пересечение, было направлено уведомление с предложением сгенерировать новые токены доступа.

Что касается причины удаления всех данных, то она кроется в давно забытом сеансе tmux на одной из рабочих машин проекта - когда-то давно один из разработчиков выполнял в данном сеансе инспектирование основной базы и оставил выставленной переменную окружения DATABASE_URL, указывающую на первичную БД. Много дней спустя разработчик в том же сеансе запустил локальный тест, в котором вызывался скрипт Database Cleaner, производящий очистку всех таблиц пред генерацией тестовой нагрузки. Так как переменная окружения DATABASE_URL указывала на основную СУБД, то и очистка была запущена в контексте первичной БД.

Для того чтобы подобное не повторилось в будущем в БД было отозвано право очистки таблиц. Во внутренние скрипты добавлен обработчик (spec_helpers), проверяющий наличие переменной окружения DATABASE_URL, а в утилитах обеспечен вывод соответствующего предупреждения. В gem-пакет Database Cleaner добавлена проверка на наличие переменной DATABASE_URL.

  1. Главная ссылка к новости (https://blog.travis-ci.com/201...)
  2. OpenNews: Инцидент с СУБД проекта GitLab
  3. OpenNews: Инфраструктура проекта Jenkins, возможно, подверглась взлому
  4. OpenNews: Критическая уязвимость в системе непрерывной интеграции Jenkins
  5. OpenNews: Серия уязвимостей в системе непрерывной интеграции Jenkins
  6. OpenNews: Атакующие заработали 3.3 млн долларов, организовав майнинг на уязвимых серверах Jenkins
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/48414-travis
Ключевые слова: travis, github
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (50) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 11:59, 09/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +18 +/
    Красивая история :) Бывает когда нажмёшь энтер и через секунду мозг понимает что ты допустим в правилах фаервола допустил ошибку а уже придётся ехать :)
     
     
  • 2.7, myhand (ok), 12:36, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    iptables-apply в Debian уже десятилетие, наверное, но мозги продолжают ехать...
     
     
  • 3.8, Аноним (-), 12:45, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Он написал "допустим", так что ..
     
  • 2.10, Еще анон (?), 12:57, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > ..а уже придётся ехать :)

    Причем, не просто ехать, а вот прям быстро-быстро ехать, пока звонки не начались!..

     
  • 2.15, Вы забыли заполнить поле Name (?), 13:14, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Скорее очередная грустная история о хиптсерах, которые не могу настроить разграничение доступов.
     
     
  • 3.23, ананим.orig (?), 16:04, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    да-да, нужно позвать эффектного манагера.
     
  • 2.19, Anon123 (?), 13:54, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +21 +/
    Народная примета: удалённая настройка фаервола - к дороге.
     
  • 2.25, kleem_head (?), 16:58, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    это когда в правой панеле mc выделенные файлы ненужного бэкапа, а в правой - выделенные файлы удаленно подключенной боевой БД. Ты нажимаешь F8 -> Удалить все И СУДОРОЖНО ВСПОМИНАЕШЬ КАКАЯ ПАНЕЛЬ БЫЛА АКТИВНА.
     
     
  • 3.26, kleem_head (?), 16:59, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    в левой и правой, попутался от остроты вспомненного
     
  • 2.27, Fomalhaut (?), 17:07, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нередко осознание приходит уже в процессе полёта пальца к кнопке, но сознание уже не успевает отозвать команду.
     
  • 2.29, KonstantinB (ok), 17:34, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Купите IP-KVM или настройте аварийный PXE boot.

    Хотя, может, вам ездить проще. Ну, не знаю. Когда датацентр в другой стране, вариант "ехать" вообще отсутствует. :)

     
     
  • 3.30, klalafuda (?), 17:41, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну если вы в Нижнем Уренгое а датацентр в Ларнаке... Может и не все так плохо
     
     
  • 4.42, Аноним (-), 07:56, 10/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Нижний Уренгой? O_o
     
  • 2.55, Аноним (-), 01:16, 11/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >  Красивая история :) Бывает когда нажмёшь энтер и через секунду мозг
    > понимает что ты допустим в правилах фаервола допустил ошибку а уже придётся ехать :)

    Я себе в таких случаях делаю "watchdog timer". Запускается нечто, что ожидает подтверждения моего присутствия. Допустим в пределах часа. Если я за час достукаться не смог - все возвращается в вид как было. Или в вид который заведомо работает.

     

  • 1.2, Аноним (-), 12:02, 09/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    DATABASE_URL указывала на основную СУБД (смех нельсона)
     
  • 1.3, Аноним (-), 12:16, 09/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    "бывает"
     
     
  • 2.5, rshadow (ok), 12:32, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Не хватает на опеннете стикеров, да?
     

  • 1.6, Gremlin (??), 12:32, 09/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Никогда не понимал все эти сервисы непрерывной интеграции. Зачем это? Интеграция ради интеграции? А когда же отдыхать?
     
     
  • 2.9, Аноним (-), 12:52, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +5 +/
    >  Никогда не понимал все эти сервисы непрерывной интеграции. Зачем это?

    Серьезно? Непонятно зачем автоматизировать то, что можно автоматизировать?
    Хотя бы ради того, чтобы не тратить свое время на прогон всех тестов и
    чтобы каждый гарантировать что каждый коммит компилируется, чтобы
    git bisect нормально работал.

     
     
  • 3.14, пох (?), 13:13, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • –6 +/
    это вы CT описали.
    А travis это все же больше к CI, и там выгоды от "автоматизации" ненужной деятельности не всегда перевешивают минусы. (ci =!= автодеплой) Скорее речь, как всегда, об "экономии времени" альтернативно-одаренных кодошлепов и их горе-тимлидов на нормальный release-management, скорей, скорей, смузи скиснет! (а там девопы как-то подлатают - больше падучих узлов запустят, или автоподнималку ускорят. Админ из такой конторы уволился пять лет назад.)

     
  • 2.11, llolik (ok), 12:58, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Никогда не понимал все эти сервисы непрерывной интеграции

    Чего там не понимать-то? Если совсем упрощённо - это автомат, который работает по схеме: закоммитили в наблюдаемую ветку -> CI собирает проект -> не собралось - плохо, ищем что сломалось (логи и отчёты в помощь) / собралось - хорошо, CI гоняет автотесты -> тесты где-то сфейлились - плохо, но хотя бы собирется, выясняем где фейлы (логи и отчёты тестов в помощь) / тесты успешны - можно деплоиться или что-там ещё делать по желанию -> далее по кругу с первого шага.

    > Зачем это?

    Затем, чтобы не делать всё это вручную.

     
     
  • 3.31, klalafuda (?), 17:44, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Чего там не понимать-то? Если совсем упрощённо - это автомат, который работает
    > по схеме: закоммитили в наблюдаемую ветку -> CI собирает проект ->
    > не собралось - плохо, ищем что сломалось (логи и отчёты в
    > помощь) / собралось - хорошо, CI гоняет автотесты -> тесты где-то
    > сфейлились - плохо, но хотя бы собирется, выясняем где фейлы (логи
    > и отчёты тестов в помощь) / тесты успешны - можно деплоиться
    > или что-там ещё делать по желанию -> далее по кругу с
    > первого шага.

    Это хорошо можно прочувствовать только если проект собирается/прогоняется под N разных платформ и даже сборка не то что прогон под каждую из них занимает существенное время.

     
  • 2.13, myhand (ok), 13:12, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ага.  А писание рукой (не путать с рукоблудием!), причем православными школьными чернилами - "развивает мелкую моторику" (тм).

    Никогда не понимал тех, кто живет не в шалаше или сырой пещере, как "близкие к природе" предки...

     
     
  • 3.40, Michael Shigorin (ok), 23:30, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Ага.  А писание рукой (не путать с рукоблудием!),
    > причем православными школьными чернилами -
    > "развивает мелкую моторику" (тм).

    А уж когда лекцию наговаривают, не особо тормозя на поворотах (как у нас в лицее) -- так ещё и навыки сжатия на лету развиваются буквально за пару недель.  Не путать с путаньем всего со всем.

     
     
  • 4.44, myhand (ok), 12:14, 10/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> "развивает мелкую моторику" (тм).
    > А уж когда лекцию наговаривают, не особо тормозя на поворотах (как у
    > нас в лицее) -- так ещё и навыки сжатия на лету развиваются буквально за пару недель.

    Ну раз за пару - смело увольняйте "умников", которые каждый раз заново "наговаривают" то, чему место на 99% в слайдах презентации и готовых конспектах.


     
  • 2.17, anonymous (??), 13:26, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Если ты не понимаешь, зачем тебе CI, тогда тебе она не нужна. Ты не программист и не участвуешь в разработке многоплатформенного проекта с несколькими вариантами исполнения готового продукта.
     
     
  • 3.20, Аноним (-), 14:05, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Наверное он не понимает, как можно доверять важные вещи какому-то мутному поделию, которое пилят забывашки сеансов, запускающие не глядя что попало, где попало и как попало, а ты уже раздухарился неуважение высказывать. Не помнишь штоли смешные истории про гитлаб, например?
     
     
  • 4.35, Аноним (-), 19:41, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > как можно доверять важные вещи какому-то мутному поделию

    да вы поехавшие. Какие вещи? "Доверять"? Это всего лишь триггер! "Условие выполнено - зеленый. Не выполнено - красный".

    Я понимаю, что в вашей среде zip архивы вместо контроля версий и неделя на сборку версии и еще две на то, что бы обеспечить хоть какой-то запуск её - это норма. Но зачем же этим хвастаться

     
     
  • 5.36, Аноним (-), 19:49, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    ты новость-то читал?
     
     
  • 6.37, пох (?), 20:19, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    это уровень понимания кодошлепами и их тимлидами как новостей, так и вообще используемых ими технологий.

    зато у всех остальных, конечно же, зип и они "ничего не умеют".

    Чем ci от ct отличается, похоже, тоже им не объяснили, давай-давай, проект не ждет пока ты разберешься в используемых тобой инструментах.

     
     
  • 7.46, Аноним (-), 12:47, 10/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    ct? вы хотя бы аббревиатуры расшифровывайте что ли
     
     
  • 8.47, Аноним (-), 13:12, 10/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот да CI знаю, CD знаю, CT 8212 что-то внезапно родившееся в мозге нашего д... текст свёрнут, показать
     
  • 6.48, Аноним (-), 13:15, 10/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > ты новость-то читал?

    Отвал CI на несколько часов разработке не помеха, многие его наверняка вообще не заметили. Если такое случается раз в несколько лет, а не каждый день, то фигня.

     
  • 2.39, Michael Shigorin (ok), 23:27, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Никогда не понимал все эти сервисы непрерывной интеграции.
    > Зачем это? Интеграция ради интеграции? А когда же отдыхать?

    Когда дезинтегрируется, а чинить вон тому парню...

     

  • 1.16, Аноним (-), 13:18, 09/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    >  Много дней спустя разработчик в том же сеансе запустил локальный тест, в котором вызывался скрипт Database Cleaner, производящий очистку всех таблиц пред генерацией тестовой нагрузки.

    А я вот всегда если вижу старый терминал -- делаю новый. Кто его знает какие там тараканы с пауками успели завестись.

     
     
  • 2.43, J.L. (?), 11:59, 10/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >>  Много дней спустя разработчик в том же сеансе запустил локальный тест, в котором вызывался скрипт Database Cleaner, производящий очистку всех таблиц пред генерацией тестовой нагрузки.
    > А я вот всегда если вижу старый терминал -- делаю новый. Кто
    > его знает какие там тараканы с пауками успели завестись.

    а монитор из спящего включаете по пробелу/ентеру или по контролу?

     
     
  • 3.52, Вы забыли заполнить поле Name (?), 14:45, 10/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    только NumLock, только хардкор
     

  • 1.18, YetAnotherOnanym (ok), 13:28, 09/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Сеансы - это дефицитнейший ресурс! Их надо сохранять и многократно повторно использовать!
     
  • 1.21, Аноним (-), 14:07, 09/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Мда,терминальные окна надо экономить, а то закончатся - придется покупать новые
     
     
  • 2.41, Michael Shigorin (ok), 23:32, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Мда,терминальные окна надо экономить, а то закончатся - придется покупать новые

    Вот Вы ёрничаете, а у них, поди, терминальные лицензии и так заканчиваются.

    PS: ну мне тоже решительно непонятно, как вообще можно лепить такой скрипт, не выставляя тестовое окружение в нём же самом... "defensive programming придумали трусы".

     
     
  • 3.45, myhand (ok), 12:17, 10/04/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    У них тестовое окружение - на .org, который для "нищ*бродов" (Максим, ну это дикость, а не фильтры "неприемлемой лексики"!) и прочего опенсорса.

    Кстати, вроде там ничего в тот раз не ломали.

     

  • 1.22, Адекват (ok), 14:40, 09/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Представил такую ситуацию в гугл - "аккаунты всех пользователей удалены, потому что один из инженеров случайно стер бд с аккаунтами, теперь разобраться кому какие данные принадлежат - невозможно"
     
     
  • 2.24, Аноним (-), 16:57, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Восстановят из архивной копии АНБ.
     
     
  • 3.33, АНБ (?), 18:39, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Восстановят из архивной копии АНБ.

    это еще зачем? Все что вы разболтали в гугле, может быть использовано против вас, но кто вам обещал, что мы вам это покажем?

     
  • 2.32, Аноним (-), 18:29, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Инженеры гугла могут только скрывать, удалять запрещено решением АНБ. Та же ерунда с телеграмом дурова, но говорят что у дурова уже нет ключей шифрования (не об OTR речь).
     
     
  • 3.34, АНБ (?), 18:41, 09/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Инженеры гугла могут только скрывать, удалять запрещено решением АНБ

    вот еще. Пусть хоть обудаляются - наша копия никуда не денется.

    кстати, забавная идея, учитывая что акаунты всех гуглосервисов нынче объединены в единственную хранилку... (нет, вы не то подумали, мы не хотим потерять нашего замечательного информатора)

     

  • 1.38, Аноним (-), 20:42, 09/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >когда-то давно один из разработчиков
    >Много дней спустя разработчик
    >дней

    Какая милая попытка загладить вину :)

     
     
  • 2.49, Аноним (-), 13:28, 10/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Да какая разница, сколько времени эта сессия висела? Цимес не в этом, а в том, что разработчик руками что-то делает на проде. У Travis CI отсутствуют CI и CD то бишь. Сапожники без сапог.
    #авосьпронесёт #яжнедурак
     
     
  • 3.56, zoonman (ok), 01:23, 11/04/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Вполне себе нормальная ситуация, когда разработчик проверяет, что происходит на прод или запускает какую-либо аналитику для компании.
     

  • 1.57, Аноним (-), 13:39, 11/04/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Никогда не доверял этим конфигурациям через переменные окружения. Больные люди это придумали, банальный config.ini и то лучше.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру