URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 116087
[ Назад ]

Исходное сообщение
"Уязвимости в системе загрузки модулей для языка Go"

Отправлено opennews , 15-Дек-18 13:11 
В реализации команды "go get (https://golang.org/pkg/cmd/go/internal/get/)", предоставляемой штатным интерфейсом командой строки для языка Go и используемой для загрузки пакетов и связанных с ними зависимоcтей, выявлено несколько уязвимостей (https://seclists.org/oss-sec/2018/q4/254), позволяющих выполнить код при обработке специально оформленных пакетов, подготовленных злоумышленниками. Проблемы устранены в корректирующих выпусках Go 1.11.3 и 1.10.6.


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


Вторая уязвимость (https://golang.org/issue/29231) (CVE-2018-16874 (https://security-tracker.debian.org/tracker/CVE-2018-16874)) позволяет при выполнении команды
"go get" выйти за пределы определённого для модуля корневого пути, через манипуляцию с фигурными скобками в импортируемых путях. Проблема проявляется только в режиме GOPATH и не затрагивает появившийся в Go 1.11 (https://www.opennet.ru/opennews/art.shtml?num=49183) экспериментальный режим модулей (https://golang.org/cmd/go/#hdr-Module_aware_go_get). При помощи данной уязвимости атакующий может перезаписать произвольные файл в ФС, насколько это позволяют текущие полномочия.

URL: https://seclists.org/oss-sec/2018/q4/254
Новость: https://www.opennet.ru/opennews/art.shtml?num=49787


Содержание

Сообщения в этом обсуждении
"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 13:39 
1.11.3 ломает go get. Но уже есть 1.11.4, в котором обещали исправить go get.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 13:40 
Вот что происходит, когда смешивают систему сборки и пакетный менеджер.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено oleg , 15-Дек-18 14:15 
maven

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Crazy Alex , 15-Дек-18 16:24 
Им собирают, как правило, то, что ни с какими нормальными пакетными менеджерами не дружит и дружить не должно - либо ынтырпрайзный софт либо андроидный, и там и там подход "всё своё тащу с собой, за обновлениями идите к разработчику, и хрен вам а не самостоятельное обновление зависимостей". Плюс монструозное и детальное поисание всего и вся, на что готов сильно не каждый.

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Vkni , 15-Дек-18 18:58 
> Им собирают, как правило, то, что ни с какими нормальными пакетными менеджерами не дружит и дружить не должно

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Vkni , 15-Дек-18 19:03 
Посмотрел список рассылки - интересная идея от manowar@altlinux.org - плагины к apt.

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 16-Дек-18 01:02 
Единственная нормальная интеграция - использовать системный пакетный менеджер. Потому что когда сразу 5 программ делают одно и то же по смыслу, результатом становится закономерный бардак и потеря контроля над процессом.

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Vkni , 17-Дек-18 00:02 
Там сложный сисадминско-административный вопрос: как наладить взаимодействие с языковыми репозитариями так, чтобы тратить как можно меньше времени и делать это минимально чeрeзжoпнo.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 16:51 
С каких пор он стал "пакетным менеджером"?

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено ананим.orig , 15-Дек-18 23:53 
> Вот что происходит, когда смешивают систему сборки и пакетный менеджер

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 16-Дек-18 11:03 
> Это происходит когда думают что ЯП заменит безопасность.

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено ананим.orig , 16-Дек-18 16:03 
Вот на это овно, братец, половину и ловят при раскрутке платформы.
Та было с го, дотнетом, жабой,..
Это уже потом "ну вы же не думали, что..".
А не ты ли, братец, этот вентилятор раскручивал? За мзду малую, а? :D

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 16-Дек-18 16:34 
> Это уже потом "ну вы же не думали, что..".

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено ананим.orig , 16-Дек-18 18:02 
> Всем (кроме Вас)

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 14:08 
Объясните кратко, какие профиты даст переход с 1.9 на 1.11.4?

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 14:40 
>появившийся в Go 1.11 экспериментальный режим модулей

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено asdasd , 15-Дек-18 15:00 
Новые SIMD инструкции и как обычно GC был сильно оптимизирован.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 19:00 
исправление уязвимостей и багов с версии 1.9 до 1.11?

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Моё правило , 15-Дек-18 14:14 
А я то думаю, почему половина софта на GO в контейнерах собирается... Знали, видимо.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Урри , 15-Дек-18 14:39 
Нет. Просто неосиляторы.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Моё правило , 15-Дек-18 15:19 
Ну ниче, с go mod теперь не нужно осваивать bash и способы установки GO_PATH, теперь можно и вылазить с контейнеров и билдить всесь go-внософт на хост системе.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 15:33 
s/с контейнеров/из контейнеров/
граммарнаци негодуэ

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено уася , 17-Дек-18 15:38 
GO_PATH это шо таке?

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Идея , 15-Дек-18 19:59 
Сам-то видимо осилил по-сложнее "Ehlo world" написать

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Моё правило , 15-Дек-18 23:29 
Проверил, ваш сниппет не работает :(

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 15:07 
А есть ещё отсталые которые собирают не в контейнерах? Печаль...

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено пох , 15-Дек-18 15:41 
s в слове docker stands for 'S'security, ага. И в rkt/lxc тоже, если что. Собирайте-собирайте.

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено OldFart , 15-Дек-18 16:10 
>и чтоб еще и запускалось не только там же где этот home есть.

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 21:46 
Т-с-с-с-

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 15:06 
А говорили что такое только на C или PHP может быть, а Go — безопасный, хм.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 15:09 
Безопасный ЯП это что-то интересное...  это как безопасный секс?

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 15:50 
Тоже самое про Rust говорят. С нетерпением жду когда у фанатиков подгорит от найденых уязвимостей. Oh, wait, они уже есть! Любой низкоуровневый код без дериктивы unsafe не работает.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 16:00 
Не могу говорить за всех фанатиков, но я, как один из них, абсолютно нормально отношусь к уязвимостях, находимым в моём языке / его экосистеме. Это, конечно, не офигеть как хорошо, но и смертельно; доказумо идеальный код в реальном мире писать невозможно, и руст, конечно же, не исключение.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено OldFart , 15-Дек-18 16:12 
Идеальный код exist :)

> echo 'Hello world';


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено аноним3 , 15-Дек-18 16:41 
согласен идеальный вариант. не подкопаешься.или на питоне: print('Hello World')
на С:
main()
{
  printf("Hello World\n");

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено OpenEcho , 15-Дек-18 23:39 
Вы правда хотите чтобы все отсюда:

https://esolangs.org/wiki/Hello_world_program_in_esoteric_la...

попало сюда ?


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено КГБ СССР , 16-Дек-18 01:15 
О мой мозг! :)

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено КГБ СССР , 16-Дек-18 01:15 
Это восхитительно!
 
 
Monkeys
 

1 RIGHT
1 RIGHT
1 RIGHT
1 RIGHT
1 RIGHT
1 RIGHT
1 DOWN
1 DOWN
1 LEFT
1 LEFT
2 LEFT
2 UP
2 RIGHT
2 LEFT
2 DOWN
2 UP
2 RIGHT
2 LEFT
2 DOWN
2 RIGHT
2 BOND
1 YELL
1 LEFT
1 LEFT
1 UP
1 UP
1 LEFT
1 LEFT
1 UP
1 UP
1 LEFT
1 DOWN
1 DOWN
1 LEFT
1 UP
1 UP
1 LEFT
1 DOWN
1 DOWN
1 RIGHT
1 DOWN
1 LEFT
1 TEACH
1 DOWN
1 RIGHT
1 UP
1 UP
1 UP
1 RIGHT
1 DOWN
1 DOWN
1 DOWN
1 DOWN
1 UP
1 RIGHT
1 RIGHT
1 DOWN
1 DOWN
1 TEACH
4 YELL
1 RIGHT
1 RIGHT
1 DOWN
1 DOWN
1 DOWN
1 LEFT
1 YELL
1 YELL
1 LEFT
1 LEFT
1 LEFT
2 LEFT
2 DOWN
2 RIGHT
2 UP
2 UP
2 LEFT
2 LEFT
2 LEFT
2 DOWN
2 DOWN
2 DOWN
2 RIGHT
2 RIGHT
2 RIGHT
2 RIGHT
2 UP
2 UP
2 UP
2 LEFT
2 LEFT
2 DOWN
2 RIGHT
2 YELL
3 YELL
1 YELL
1 RIGHT
1 RIGHT
1 RIGHT
1 YELL
4 DOWN
4 TEACH
4 DOWN
4 DOWN
4 DOWN
4 DOWN
4 DOWN
2 RIGHT
6 LEFT
6 DOWN
6 RIGHT
6 UP
6 UP
6 LEFT
6 DOWN
6 RIGHT
6 YELL
4 YELL
2 YELL


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним84701 , 16-Дек-18 01:10 
> согласен идеальный вариант. не подкопаешься.


% 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

;-)

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено OpenEcho , 16-Дек-18 11:49 
>> согласен идеальный вариант. не подкопаешься.
>
 
> % echo "Hello" >> /dev/full
> echo: write error: no space left on device
>

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

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



"Уязвимости в системе загрузки модулей для языка Go"
Отправлено трололо , 16-Дек-18 11:58 
и не говори . кто их просил в /dev отправлять)))

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 20:14 
> Это, конечно, не офигеть как хорошо, но и смертельно

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 17-Дек-18 09:30 
> А говорили что такое только на C или PHP может быть, а Go — безопасный, хм.

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


"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Crazy Alex , 15-Дек-18 16:15 
Ну нормально, и этим пришла очередь по граблям походить... Закономерный этап.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним , 15-Дек-18 20:15 
а может sysvinit на rust переписать?

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено аноним3 , 15-Дек-18 23:57 
rustinit? ох уж эти любители суперегероев от корпораций))))

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено щавель , 17-Дек-18 13:17 
sysrust, тогда уж.

"Уязвимости в системе загрузки модулей для языка Go"
Отправлено Аноним2 , 19-Дек-18 05:39 
sysirust, тогда уж.