Files
vikunja/vikunja.service
kolaente 73c2d56e9b fix(security): disable MPTCP on listen sockets via GODEBUG
Go 1.24+ enables MPTCP by default on Linux listen sockets, exposing
Vikunja to CVE-2026-98432 (kernel IPv4 TCP use-after-free) on unpatched
hosts. Set GODEBUG=multipathtcp=0 in the systemd unit and Docker image
as a stopgap until host kernels are patched.
2026-10-30 23:56:42 +01:00

56 lines
1.6 KiB
Desktop File

[Unit]
Description=Vikunja
After=syslog.target
After=network.target
# Depending on how you configured Vikunja, you may want to uncomment these:
#Requires=mysql.service
#Requires=mariadb.service
#Requires=postgresql.service
#Requires=redis.service
[Service]
RestartSec=2s
Type=simple
WorkingDirectory=/opt/vikunja
ExecStart=/usr/local/bin/vikunja
Restart=always
# Mitigates CVE-2026-98432 (kernel IPv4 TCP use-after-free) by disabling MPTCP
# on Vikunja's listen sockets. Remove once the host kernel is patched.
Environment=GODEBUG=multipathtcp=0
# Keeps the SQLite database and stored files private to the service user.
UMask=0077
# Hardening
NoNewPrivileges=yes
ProtectProc=invisible
ProcSubset=pid
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectKernelLogs=yes
ProtectControlGroups=yes
ProtectClock=yes
ProtectHostname=yes
PrivateDevices=yes
RestrictNamespaces=yes
RestrictSUIDSGID=yes
RestrictRealtime=yes
LockPersonality=yes
MemoryDenyWriteExecute=yes
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK
SystemCallArchitectures=native
SystemCallFilter=@system-service
SystemCallFilter=~@privileged @resources
# Return ENOSYS instead of killing the process when a syscall is not in the
# allowlist. Syscalls newer than systemd's table can never be allowlisted, so
# killing breaks runtimes that probe for them on new kernels (#3252).
SystemCallErrorNumber=ENOSYS
# If you want to bind Vikunja to a port below 1024 uncomment
# the two values below
###
#CapabilityBoundingSet=CAP_NET_BIND_SERVICE
#AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target