Re: systemd CAP_DAC_READ_SEARCH

2023-06-29 Diskussionsfäden Andreas Fett
Hallo,

On Thu, Jun 29, 2023 at 07:55:30PM +0200, Konrad Rosenbaum wrote:
> Die man-Page klingt nicht gerade wie eine uneingeschränkte Empfehlung durch
> die Kernelentwickler.

Oh. Hatte das noch gar nicht nachgeguckt, aber in der Tat, nicht nur die
Linux manpage sondern auch die von Open-/Net-/Freebsd und sogar die von
der Opengroup (aka POSIX) enthalten unterschiedlich deutliche Formen von
"dont't use this". 

> Kurz: man kann nur davon abraten access() zu benutzen.
Ja... Antipattern.

Grüsse
Andreas









signature.asc
Description: PGP signature


Re: systemd CAP_DAC_READ_SEARCH

2023-06-29 Diskussionsfäden Konrad Rosenbaum

Hi,

On 28/06/2023 22:28, Andreas Fett wrote:

On Wed, Jun 28, 2023 at 10:02:37PM +0200, Christian Perle wrote:


Die Capability CAP_DAC_READ_SEARCH erlaubt zwar open()/openat()
auf eine sonst nicht lesbare Datei, aber die access()-Familie liefert
einen Fehler. Ob das jetzt inkonsistentes Verhalten des Kernels
ist, sei mal dahingestellt.

Ich finde dieses access()/open() Pattern im userspace ist generell
kaputt. Das ist ja eh immer anfällig für race conditions.


Die access() calls ignorieren zum Teil auch Flags auf Mount-Ebene, ACLs, 
Superuser-Rechte etc. Es werden nur stupide die Bits der klassischen 
Zugriffsrechte geprüft. Es gibt Race Conditions, Security Considerations 
und angeblich auch versteckte Drachen, die Hunger auf ahnungslose 
Programmierer haben.


Die man-Page klingt nicht gerade wie eine uneingeschränkte Empfehlung 
durch die Kernelentwickler.


Kurz: man kann nur davon abraten access() zu benutzen.


    Konrad



OpenPGP_0xBE96A6EE776FE5D0.asc
Description: OpenPGP public key


OpenPGP_signature
Description: OpenPGP digital signature


Re: systemd CAP_DAC_READ_SEARCH

2023-06-28 Diskussionsfäden Andreas Fett
Hi,

On Wed, Jun 28, 2023 at 10:02:37PM +0200, Christian Perle wrote:
> nach ein paar Bier und etwas Rumpro"bier"en hat sich folgendes
> rausgestellt:
> 
> Obwohl der Splunk-Prozess die korrekte Capability in den entsprechenden
> Sets hat, gibt es den Fehler, weil er *vor* dem eigentlich open()
> auf die Datei ein access() respektive faccessat() darauf loslaesst.
nice work... ich vermute da war neben Bier auch strace involviert :-)

> Die Capability CAP_DAC_READ_SEARCH erlaubt zwar open()/openat()
> auf eine sonst nicht lesbare Datei, aber die access()-Familie liefert
> einen Fehler. Ob das jetzt inkonsistentes Verhalten des Kernels
> ist, sei mal dahingestellt.
Ich finde dieses access()/open() Pattern im userspace ist generell
kaputt. Das ist ja eh immer anfällig für race conditions.

Grüsse
Andreas


signature.asc
Description: PGP signature


Re: systemd CAP_DAC_READ_SEARCH

2023-06-28 Diskussionsfäden Christian Perle
Hallo Liste,

nach ein paar Bier und etwas Rumpro"bier"en hat sich folgendes
rausgestellt:

Obwohl der Splunk-Prozess die korrekte Capability in den entsprechenden
Sets hat, gibt es den Fehler, weil er *vor* dem eigentlich open()
auf die Datei ein access() respektive faccessat() darauf loslaesst.

Die Capability CAP_DAC_READ_SEARCH erlaubt zwar open()/openat()
auf eine sonst nicht lesbare Datei, aber die access()-Familie liefert
einen Fehler. Ob das jetzt inkonsistentes Verhalten des Kernels
ist, sei mal dahingestellt.

Simples Testprogramm, schlaegt trotz CAP_DAC_READ_SEARCH fehl:

-
#define _POSIX_C_SOURCE 200809L

#include 
#include 

int main()
{
int ret;

ret = access("/var/log/kern.log", R_OK);

if (-1 == ret) {
perror("access");
return 1;
}

return 0;
}
-

Gruss,
  Christian
-- 
Christian Perlechris AT linuxinfotag.de
010111  http://chris.silmor.de/
101010  LinuxGuitarKitesBicyclesBeerPizzaRaytracing


Re: systemd CAP_DAC_READ_SEARCH

2023-06-26 Diskussionsfäden Christian Perle
Hallo Andreas,

On Tue, Jun 13, 2023 at 15:29:02 +0200, Andreas Roth wrote:

[systemd-Unit non-root mit Capabilities]
> Wenn ich eine ältere Version (8.2.*) der Software installiere sind
> die Werte:
> 
> NoNewPrivileges=yes
> AmbientCapabilities=CAP_DAC_READ_SEARCH
> 
> per default nicht gesetzt. Wenn ich sie hinzufüge, ein systemctl
> daemon-reload ausführe kann die Software nicht auf Dateien zugreifen,
> auf welche der Technische Nutzer Leseberechtigung hat.
> 
> Das verwundert mich. Ich habe geprüft ob die capabilites wirklich beim
> Dienst ankommen - sieht erstmal gut aus:
[...]
> [root@ip-10-53-1-118 local]# getpcaps 3527
> 3527: cap_dac_read_search=eip

Mit getpcaps kannst Du nicht sehen, ob die Capabilities auch im
Ambient-Set gesetzt sind. Besser direkt in /proc greppen:

# grep Cap /proc/PID/status


Das folgende Minimalbeispiel hat bei mir in einem Debian 11 Livesystem
funktioniert:

# Put this in /etc/systemd/system/
# telnetd is actually busybox telnetd:
#   CONFIG_TELNETD=y
#   CONFIG_FEATURE_TELNETD_STANDALONE=y
# Shell provided by telnet login runs as unprivileged user but has
# CAP_DAC_READ_SEARCH, thus it can read any file/dir.
# After login, run
# $ grep Cap /proc/$$/status
# to verify CAP_DAC_READ_SEARCH is allowed in ambient set.
[Unit]
Description=telnetd

[Service]
User=user
Group=user
NoNewPrivileges=yes
AmbientCapabilities=CAP_DAC_READ_SEARCH
ExecStart=/usr/local/bin/telnetd -F -p  -l /bin/bash

[Install]
WantedBy=multi-user.target


Gruss,
  Christian
-- 
Christian Perlechris AT linuxinfotag.de
010111  http://chris.silmor.de/
101010  LinuxGuitarKitesBicyclesBeerPizzaRaytracing


systemd CAP_DAC_READ_SEARCH

2023-06-13 Diskussionsfäden Andreas Roth
Hallo Liste,

Ich habe ein unerwartetes verhalten bei der Software Splunk Universal Forwarder 
in Verbindung mit systemd und Capabilities. Bei der Installation der 9.0.x 
Version wird ein Systemd Service file angelegt.

[Unit]
Description=Systemd service file for Splunk, generated by 'splunk enable 
boot-start'
After=network-online.target
Wants=network-online.target

[Service]
-->schnipp<--
User=splunk
Group=splunk
NoNewPrivileges=yes
AmbientCapabilities=CAP_DAC_READ_SEARCH
-->schnipp<--
[Install]
WantedBy=multi-user.target 

Wenn er Dienst startet hat er durch CAP_DAC_READ_SEARCH Lesezugriff auf alle 
Dateien im Filesystem. Ob das gut oder schlecht ist lassen wir mal 
dahingestellt. 

Wenn ich eine ältere Version (8.2.*) der Software installiere sind die Werte:

NoNewPrivileges=yes
AmbientCapabilities=CAP_DAC_READ_SEARCH

per default nicht gesetzt. Wenn ich sie hinzufüge, ein systemctl daemon-reload 
ausführe kann die Software nicht auf Dateien zugreifen, auf welche der 
Technische Nutzer Leseberechtigung hat.

Das verwundert mich. Ich habe geprüft ob die capabilites wirklich beim Dienst 
ankommen - sieht erstmal gut aus:

[root@ip-10-53-1-118 local]# systemctl status SplunkForwarder |grep -i PID
 Main PID: 3527 (splunkd)
   └─3552 [splunkd pid=3527] splunkd --under-systemd 
--systemd-delegate=yes -p 8089 _internal_launch_under_systemd [process-runner]
Jun 13 13:26:04 ip-10-53-1-118 splunk[3527]: 2023-06-13 13:26:04.083 + 
splunkd started (build 4a20fb65aa78) pid=3527

[root@ip-10-53-1-118 local]# getpcaps 3527
3527: cap_dac_read_search=eip

Any hints? Für mich sieht ja fast so aus, als wenn das Setzen der Capability 
nicht ausrecht und die Software das noch aktiv unterstützen muss?!

Besten Gruss,

Andreas