[devel-distro] I: mkimage-profiles 1.1.26

Michael Shigorin mike at osdn.org.ua
Mon Mar 10 23:06:53 MSK 2014


	Здравствуйте.
За прошлую неделю в m-p была заметно подтянута документация,
которая по факту не всегда обновлялась коммитами, вносящими
изменения в код (увы).

В фиче deflogin внезапно обнаружилась потенциальная дыра
при текущей реализации функции xport() в lib/functions.mk:
возможно сказать use/deflogin (при этом затребуется экспорт
переменной ROOTPW), не задать никакого значения ROOTPW ни прямо,
ни косвенно и собрать с полученной конфигурацией образ -- это
приводит к гарантированно определённой и пустой GLOBAL_ROOTPW,
что обходит проверку в скриптовом хуке.

Этого можно избежать, если перед экспортированием переменной
проверять её ifdef'ом -- но изначальная реализация (на всякий
прикладываю коммит) не учитывала того, что здесь используется 
отложенное присваивание ('=', а не ':=', в терминах make),
соответственно на момент проверки значения может ещё не быть.

Чтобы сделать по уму -- видимо, придётся выносить экспорты из
генерируемого distcfg.mk в отдельный exportcfg.mk или как его.
И включать уже после сбора конфигурации.

Также в порядке эксперимента добавились ручки к настройкам
слайдшоу (см. http://www.altlinux.org/Branding/slideshow);
для начала сделал use/branding/slideshow/once, работает.

В остальном -- мелкие правки уже наделанного.

-- 
 ---- WBR, Michael Shigorin / http://altlinux.org
  ------ http://opennet.ru / http://anna-news.info
-------------- next part --------------
>From 747ae47c53b1f312371730da27bb27732748ac0c Mon Sep 17 00:00:00 2001
From: Michael Shigorin <mike at altlinux.org>
Date: Wed, 5 Mar 2014 21:20:50 +0400
Subject: [PATCH 1/6] [sec] lib/functions.mk: ifdef vars before exporting

xport() would happily yield an _empty_ GLOBAL_VAR
when told to export an _undefined_ VAR by name.

This may result in a security problem when using deflogin feature:
- one can use/deflogin to configure user passwords but not root one;
- ROOTPW is unset (undefined) then but still marked for export;
- distcfg.mk gets "export GLOBAL_ROOTPW = $(ROOTPW)";
- 50-root script hook carefully checks for _unset_ variable
  but it's been _set_ to empty due to the implementation;
- thus empty root password is set instead of not setting it at all
  opening up the system to local unauthorized access
  or local privilege escalation.

Wonder if make-3.82+ behaves differently when setting a variable
to an unset one... it's not the 'undefine' directive in the NEWS.
I must be careful at any rate though.
---
 lib/functions.mk | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/functions.mk b/lib/functions.mk
index 6a3f38c..4364a46 100644
--- a/lib/functions.mk
+++ b/lib/functions.mk
@@ -41,7 +41,8 @@ xport = $(and $(1),$(xport_body))
 define xport_body
 { $(log_body); \
 v='$(1:GLOBAL_%=%)'; \
-printf 'export GLOBAL_%s = $$(%s)\n' "$$v" "$$v" >> "$(CONFIG)"; }
+printf 'ifdef %s\nexport GLOBAL_%s = $$(%s)\nendif\n' "$$v" "$$v" "$$v" \
+	>> "$(CONFIG)"; }
 endef
 
 # if the rule being executed isn't logged yet, log it
-- 
1.8.3.4



More information about the devel-distro mailing list