Univention Bugzilla – Bug 27573
Auswertung UCR tab completition
Last modified: 2016-11-25 12:35:47 CET
Es kann shellcode ausgeführt werden 1. Variable setzten # ucr set xxx='`cat /etc/shadow`' 2. Variable erneut setzten + tab drücken # ucr set xxx=[TAB] siehe da: # ucr set xxx="root:$1$g6AsGAwu$LqlXzdksWiAkQvje0WIq..:15492:0:99999:7:::
Das ist keine Sicherheitslücke: Ausgenutzt werden kann es nur, wenn UCR-Variablen gesetzt werden können, also entweder der User root oder ein Benutzer, der Zugriffsrechte auf das UCR-Modul der UMC hat. Letzteres ist ohnehin root-äquivalent: Ein Benutzer, der UCR-Variablen setzen kann, hat z.B. die Möglichkeit einen Cron-Job in UCR zu definieren, der ihm eine Root-Shell einrichtet.
Stimmt, keine Sicherheitslücke im engeren Sinne. aber trotzdem sollte die Tab-Completion ggf. enthaltene Programme nicht ausführen: Denn da werden (z.B.) für den Updater auch Kommandozeilenaufrufe hinterlegt, die erst irgendwann in Zukunft ausgeführt werden. Ein ggf. darin vorhandenes `ucr get ...` sollte dann nicht schon jetzt ausgeführt werden. Wer auch immer dieses Bug bearbeiten darf: Viel Spaß mit dem Shell- und Readline-Quoting, meiner bisherigen Erfahrung nach ist das fast ein Ding der Unmöglichkeit ;-)
Wie könnten die Bash Completion für set einfach deaktivieren.
Da keine echte Sicherheitslücke nicht zu UCS 3.0-2. Bei Einwänden melden.
UCS 3.1 will be the next release.
Wurde angepasst. In der erstem Version hatte ich nur die Werte in ' gesetzt, dadurch wurden sie nicht mehr evaluiert. Das Resultat war dann: ucr set xxx=[TAB] ucr set xxx="`cat /etc/shadow`" Wenn dann aber der Wert erweitert wurde, beispielsweise ucr set xxx="`cat /etc/shadow` foo" Dann wurde der cat Befehl ausgewertet. Anstatt " werden jetzt ' verwendet. Das Resultat: ucr set xxx=[TAB] ucr set xxx='`cat /etc/shadow`' Da das mit den gleichen Berechtigungen ausgeführt wird, ist es keine Sicherheitslücke, deshalb habe ich das Subjekt geändert.
OK: base/univention-config-registry/etc/bash_completion.d/univention-config-registry OK: ucr set foo=\`date\` bar=\$\(date\) bam=foo\"bar FAIL: ucr set baz=foo\'bar # → ...baz='foobar\ (ich halte das nicht für kritisch und lohne vermutlich den Aufwand nicht, in anbetracht daß da noch mehr im Argen liegt mit der Completion) OK: Die Completion funktioniert nur für die 1. Variable; bei "foo=1 bar=<TAB>" erfolgt keine Vorschlag mehr für bar (das ist ein Problem von _get_cword() aus /etc/bash_completion und ging auch vorher schon nicht, von daher kein Problem dieses Bugs) FAIL: Im ChangeLog steht noch "double quotes". [set→put] in [double→single] quotes [and the value will no longer be→to protect it from being] evaluated
(In reply to comment #7) > OK: > base/univention-config-registry/etc/bash_completion.d/univention-config-registry > OK: ucr set foo=\`date\` bar=\$\(date\) bam=foo\"bar > > FAIL: ucr set baz=foo\'bar # → ...baz='foobar\ > (ich halte das nicht für kritisch und lohne vermutlich den Aufwand nicht, in > anbetracht daß da noch mehr im Argen liegt mit der Completion) Ja, sehe ich auch so. > OK: Die Completion funktioniert nur für die 1. Variable; bei "foo=1 bar=<TAB>" > erfolgt keine Vorschlag mehr für bar > (das ist ein Problem von _get_cword() aus /etc/bash_completion und ging auch > vorher schon nicht, von daher kein Problem dieses Bugs) > > FAIL: Im ChangeLog steht noch "double quotes". > [set→put] in [double→single] quotes [and the value will no longer be→to protect > it from being] evaluated Ist angepasst.
(In reply to comment #8) > > FAIL: Im ChangeLog steht noch "double quotes". > > [set→put] in [double→single] quotes [and the value will no longer be→to protect > > it from being] evaluated > > Ist angepasst. OK: ChangeLog svn14729
(In reply to comment #7) > OK: Die Completion funktioniert nur für die 1. Variable; bei "foo=1 bar=<TAB>" > erfolgt keine Vorschlag mehr für bar > (das ist ein Problem von _get_cword() aus /etc/bash_completion und ging auch > vorher schon nicht, von daher kein Problem dieses Bugs) Wenn man die einfachen Quotes aus der 1. Completion löscht, funktioniert danach auch die Completion für weitere Argumente. # ucr set update/se<TAB> → ucr set update/secure_apt='yes' repo<TAB> → <BEL> ← ucr set update/secure_apt=yes repo<TAB> → ucr set update/secure_apt=no repository/ Damit ist das ein Bash-Problem, den _get_cword() bekommt das nicht richtig hin.
UCS 3.1-0 has been released: http://forum.univention.de/viewtopic.php?f=54&t=2125 If this error occurs again, please use "Clone This Bug".
*** Bug 22261 has been marked as a duplicate of this bug. ***