The OpenNET Project / Index page

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

Уязвимости в системе загрузки модулей для языка Go

15.12.2018 12:54

В реализации команды "go get", предоставляемой штатным интерфейсом командой строки для языка Go и используемой для загрузки пакетов и связанных с ними зависимоcтей, выявлено несколько уязвимостей, позволяющих выполнить код при обработке специально оформленных пакетов, подготовленных злоумышленниками. Проблемы устранены в корректирующих выпусках Go 1.11.3 и 1.10.6.

Первая уязвимость (CVE-2018-16873) проявляется при выполнении команды "go get -u" и прямом импорте модулей в режиме GOPATH. Атака сводится к созданию в модуле импортируемых путей, заканчивающихся на "/.git", которые воспринимаются при вызове "go get -u" как корень репозитория с последующим выполнением в нём команд git. Выполнение кода организуется через размещение вредоносных команд в прикреплённом к репозиторию файле конфигурации git;

Вторая уязвимость (CVE-2018-16874) позволяет при выполнении команды "go get" выйти за пределы определённого для модуля корневого пути, через манипуляцию с фигурными скобками в импортируемых путях. Проблема проявляется только в режиме GOPATH и не затрагивает появившийся в Go 1.11 экспериментальный режим модулей. При помощи данной уязвимости атакующий может перезаписать произвольные файл в ФС, насколько это позволяют текущие полномочия.

  1. Главная ссылка к новости (https://seclists.org/oss-sec/2...)
  2. OpenNews: Уязвимость, позволяющая удалённо выполнить код на сервере PHP-репозитория Packagist
  3. OpenNews: Уязвимость в Apache CouchDB, позволяющая совершить атаку на реестр пакетов NPM
  4. OpenNews: В RubyGems устранена уязвимость, позволявшая подменять файлы в репозитории
  5. OpenNews: Уязвимость в пакетном менеджере APT, проявляющаяся в конфигурациях с зеркалами
  6. OpenNews: Уязвимость в пакетном менеджере APK, позволяющая удалённо выполнить код в Alpine Linux
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/49787-golang
Ключевые слова: golang, module
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (48) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.4, Аноним (4), 13:39, 15/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    1.11.3 ломает go get. Но уже есть 1.11.4, в котором обещали исправить go get.
     
  • 1.5, Аноним (5), 13:40, 15/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +14 +/
    Вот что происходит, когда смешивают систему сборки и пакетный менеджер.
     
     
  • 2.8, oleg (??), 14:15, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    maven
     
     
  • 3.24, Crazy Alex (ok), 16:24, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Им собирают, как правило, то, что ни с какими нормальными пакетными менеджерами не дружит и дружить не должно - либо ынтырпрайзный софт либо андроидный, и там и там подход "всё своё тащу с собой, за обновлениями идите к разработчику, и хрен вам а не самостоятельное обновление зависимостей". Плюс монструозное и детальное поисание всего и вся, на что готов сильно не каждый.

    С Go этот подход попытались протащить туда, где пакетные менеджеры есть, да ещё обеспечить удобство работы с пакаджами. А оно так не работает - либо ты описываешь всё детально и имеешь простыни либо делегируешь задачу тому, для чего она первоочередная - как установка пакетов для дистрибутива/пакетного менеджера. А подход "сделаем впридачу к языку, и чтобы оно было всё волшебно и удобно" не взлетает - угу, начиная с того самого leftpad.

     
     
  • 4.30, Vkni (ok), 18:58, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Им собирают, как правило, то, что ни с какими нормальными пакетными менеджерами не дружит и дружить не должно

    Вот это, кстати, конкретнейшая проблема. Надо Михаила спросить про текущее состояние интеграции с языковыми пакетными менеджерами. В Альте была движуха год назад, но, кажется, воз и ныне там.

     
     
  • 5.32, Vkni (ok), 19:03, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Посмотрел список рассылки - интересная идея от manowar@altlinux.org - плагины к apt.

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

     
  • 5.41, Аноним (-), 01:02, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Единственная нормальная интеграция - использовать системный пакетный менеджер. Потому что когда сразу 5 программ делают одно и то же по смыслу, результатом становится закономерный бардак и потеря контроля над процессом.

    А у хипстоты с новоязами к тому же есть большие проблемы с пониманием азов безопасности.

     
     
  • 6.51, Vkni (ok), 00:02, 17/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Там сложный сисадминско-административный вопрос: как наладить взаимодействие с языковыми репозитариями так, чтобы тратить как можно меньше времени и делать это минимально чeрeзжoпнo.
     
  • 3.26, Аноним (26), 16:51, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    С каких пор он стал "пакетным менеджером"?
     
  • 2.39, ананим.orig (?), 23:53, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Вот что происходит, когда смешивают систему сборки и пакетный менеджер

    Не-не!
    Это происходит когда думают что ЯП заменит безопасность.

     
     
  • 3.45, Аноним (45), 11:03, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Это происходит когда думают что ЯП заменит безопасность.

    Кроме Вас так никто не думает. Да и Вы так не думаете. На (условно)безопасном языке всегда можно написать небезопасные алгоритмы, небезопасную логику. Но овно на вентилятор надо вбросить, верно, братец-аноним?

     
     
  • 4.48, ананим.orig (?), 16:03, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Вот на это овно, братец, половину и ловят при раскрутке платформы.
    Та было с го, дотнетом, жабой,..
    Это уже потом "ну вы же не думали, что..".
    А не ты ли, братец, этот вентилятор раскручивал? За мзду малую, а? :D
     
     
  • 5.49, Аноним (45), 16:34, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Это уже потом "ну вы же не думали, что..".

    До Вас не дошло, братец. В отличие от Вас, все сразу понимали и знали, где "грабли зарыты" в "безопасных языках". Всем (кроме Вас) изначально было понятно, что если в "безопасном языке" в программном блоке перед "бесконечным циклом" Вы выделите гиг памяти под массив, обработаете его, не "обнулите" ссылку, а в последующем цикле он Вам уже нафиг не нужен (мало ли, Вам только хэш нужен был от массива) - то получите аналог "утечки памяти". Но Вас ведь надо носом в такое тыкать?

     
     
  • 6.50, ананим.orig (?), 18:02, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Всем (кроме Вас)

    хорэ врать! Тут народ только этим и занимается. В любой новости об уязвимостях в проектах на С/С++.
    И "прозревает" (прям как вы сейчас) во всех остальных.
    Начиная с аксакала Айзена. :D

     

  • 1.6, Аноним (6), 14:08, 15/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Объясните кратко, какие профиты даст переход с 1.9 на 1.11.4?
     
     
  • 2.10, Аноним (10), 14:40, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >появившийся в Go 1.11 экспериментальный режим модулей
     
  • 2.11, asdasd (?), 15:00, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Новые SIMD инструкции и как обычно GC был сильно оптимизирован.
     
  • 2.31, Аноним (31), 19:00, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    исправление уязвимостей и багов с версии 1.9 до 1.11?
     

  • 1.7, Моё правило (?), 14:14, 15/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А я то думаю, почему половина софта на GO в контейнерах собирается... Знали, видимо.
     
     
  • 2.9, Урри (?), 14:39, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нет. Просто неосиляторы.
     
     
  • 3.15, Моё правило (?), 15:19, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ну ниче, с go mod теперь не нужно осваивать bash и способы установки GO_PATH, теперь можно и вылазить с контейнеров и билдить всесь go-внософт на хост системе.
     
     
  • 4.16, Аноним (16), 15:33, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    s/с контейнеров/из контейнеров/
    граммарнаци негодуэ
     
  • 4.54, уася (?), 15:38, 17/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    GO_PATH это шо таке?
     
  • 3.33, Идея (?), 19:59, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Сам-то видимо осилил по-сложнее "Ehlo world" написать
     
     
  • 4.37, Моё правило (?), 23:29, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Проверил, ваш сниппет не работает :(
     
  • 2.13, Аноним (13), 15:07, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    А есть ещё отсталые которые собирают не в контейнерах? Печаль...
     
  • 2.17, пох (?), 15:41, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    s в слове docker stands for 'S'security, ага. И в rkt/lxc тоже, если что. Собирайте-собирайте.

    На самом деле, разумеется, это делают для того, чтобы не выгребать потом тонны мусора из своего home, и чтоб еще и запускалось не только там же где этот home есть.

     
     
  • 3.21, OldFart (?), 16:10, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >и чтоб еще и запускалось не только там же где этот home есть.

    Скомпилированному файлу накакать на home...

     
     
  • 4.36, Аноним (36), 21:46, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Т-с-с-с-
     

  • 1.12, Аноним (12), 15:06, 15/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    А говорили что такое только на C или PHP может быть, а Go — безопасный, хм.
     
     
  • 2.14, Аноним (13), 15:09, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Безопасный ЯП это что-то интересное...  это как безопасный секс?
     
  • 2.18, Аноним (18), 15:50, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже самое про Rust говорят. С нетерпением жду когда у фанатиков подгорит от найденых уязвимостей. Oh, wait, они уже есть! Любой низкоуровневый код без дериктивы unsafe не работает.
     
     
  • 3.20, Аноним (20), 16:00, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не могу говорить за всех фанатиков, но я, как один из них, абсолютно нормально отношусь к уязвимостях, находимым в моём языке / его экосистеме. Это, конечно, не офигеть как хорошо, но и смертельно; доказумо идеальный код в реальном мире писать невозможно, и руст, конечно же, не исключение.
     
     
  • 4.22, OldFart (?), 16:12, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Идеальный код exist :)

    > echo 'Hello world';

     
     
  • 5.25, аноним3 (?), 16:41, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    согласен идеальный вариант. не подкопаешься.или на питоне: print('Hello World')
    на С:
    main()
    {
      printf("Hello World\n");

    }
    пишем все. кто на чем. хочу на дельфях глянуть)))

     
     
  • 6.38, OpenEcho (?), 23:39, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Вы правда хотите чтобы все отсюда:

    https://esolangs.org/wiki/Hello_world_program_in_esoteric_languages

    попало сюда ?

     
     
  • 7.43, КГБ СССР (?), 01:15, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    О мой мозг! :)
     
     
  • 8.44, КГБ СССР (?), 01:15, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это восхитительно Monkeys CODE 1 RIGHT 1 RIGHT 1 RIGHT 1 RIGHT 1 RIGHT ... текст свёрнут, показать
     
  • 6.42, Аноним84701 (ok), 01:10, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > согласен идеальный вариант. не подкопаешься.




    % echo "Hello" >> /dev/full
    echo: write error: no space left on device



    >или на питоне: print('Hello World')




    % python -c "print 'helllo'" >>/dev/full
    close failed in file object destructor:
    sys.excepthook is missing
    lost sys.stderr



    ;-)

     
     
  • 7.46, OpenEcho (?), 11:49, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> согласен идеальный вариант. не подкопаешься.
    >


    > % echo "Hello" >> /dev/full
    > echo: write error: no space left on device
    >


    >>или на питоне: print('Hello World')

    Вот правда, как в жизни, была нормальная программа, пришли, доработали и пипец, а ведь в начале все работало...


     
     
  • 8.47, трололо (?), 11:58, 16/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    и не говори кто их просил в dev отправлять ... текст свёрнут, показать
     
  • 4.34, Аноним (34), 20:14, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это, конечно, не офигеть как хорошо, но и смертельно

    Долго завис на этой фразе

     
  • 2.52, Аноним (52), 09:30, 17/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > А говорили что такое только на C или PHP может быть, а Go — безопасный, хм.

    Вы неверно услышали, что говорили. Или не уловили суть данных двух уязвимостей. На безопасном языке можно запросто написать небезопасный алгоритм. А вот по невнимательности обратиться к освобожденной области памяти в C легче чем в Go.

     

  • 1.23, Crazy Alex (ok), 16:15, 15/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Ну нормально, и этим пришла очередь по граблям походить... Закономерный этап.
     
  • 1.35, Аноним (35), 20:15, 15/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    а может sysvinit на rust переписать?
     
     
  • 2.40, аноним3 (?), 23:57, 15/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    rustinit? ох уж эти любители суперегероев от корпораций))))
     
     
  • 3.53, щавель (?), 13:17, 17/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    sysrust, тогда уж.
     
     
  • 4.55, Аноним2 (?), 05:39, 19/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    sysirust, тогда уж.
     

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



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

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