fix(security): API-Keys nur für Admins, Mailversand ohne Datei-/URL-Zugriff

- ApiKeysController verlangt MANAGE_SETTINGS. Bisher konnte jeder
  OIDC-Benutzer einen API-Key erzeugen, der im PermissionsGuard jede
  Rechteprüfung umgeht (Rechteausweitung zum Admin).
- MailService setzt disableFileAccess/disableUrlAccess für jede Mail.
- send-email im Posteingang prüft den Body streng auf Strings/Zahlen.
  Bisher liest nodemailer bei html: { path: '/proc/self/environ' }
  beliebige Serverdateien ein und verschickt sie.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bjoernpoettkerandClaude Opus 5.5 committed 2026-11-04 10:46:43 +01:00
1 parent 0406354b8b
commit bb8bf3714f
7 files changed
+192 -9

No files matched your search

@@ -27,6 +27,7 @@ import {
kennzahlenAusPdf,
type VergleichKennzahlen,
} from '../paperless/vergleich-kennzahlen.util';
import { parseSendEmailBody } from './send-email-body.util';
@Controller('api/inbox')
@RequirePermissions(Permission.VIEW_SCANNER)
@@ -284,17 +285,10 @@ export class InboxController {
@HttpCode(204)
async sendEmail(
@Param('id') id: string,
@Body()
body: {
to: string;
subject: string;
body: string;
html?: string;
segments: { pages: number[]; filename: string }[];
sender?: string;
},
@Body() rawBody: unknown,
@Request() req: any,
): Promise<void> {
const body = parseSendEmailBody(rawBody);
const preferredUsername: string | null =
req.user?.preferredUsername ?? null;
const smtpOverride =