Moin,
leider nehmen die Zugriffe auf IMAP als ungeschütztes Protokoll zu, cred Angriffe werden immer zahlreicher und Passwörter sind durch leaks bekannt und werden dort einfach über Botnetze getestet. Ich weiß viel Zeit ist nicht, ich getraue mich ehrlich gesagt auch nicht an C++ ran obwohl ich die Stellen bereits identifiziert habe. Die eigentliche Idee war ja die Passwort/Salt Spalte umzubenennen und die PHP Logik anzupassen und dann die Orginalspalten mit generierten App Passwörtern zu füllen sofern der Kunde IMAP aktiviert. Aber das empfinde ich als zu großen Eingriff besser wäre hier die Logik in b1gmailserver direkt...zudem Wartung auch mist wenn es mal ein update gibt.
KI schlägt mir folgendes vor in b1gmailserver, ist mir alles zu riskant:
Empfohlenes Zielbild:
- Hauptpasswort für IMAP komplett verbieten.
- Beim Aktivieren von IMAP automatisch ein zufälliges App-Passwort erzeugen.
- App-Passwort nur einmal im Klartext anzeigen (danach nie wieder).
- In DB nur Hash speichern (Argon2id/bcrypt), plus created_at, last_used_at, revoked_at, label.
- Optional mehrere App-Passwörter pro Kunde (Outlook, iPhone, Thunderbird), einzeln widerrufbar. -> näh
Das hat mir die KI ausgeworfen aber ich denke Patrick weiß besser was zu tun ist.
Umsetzungsvorschlag für b1gMailServer IMAP
1) IMAP-Hauptpasswort deaktivieren (LOGIN)
Datei: C:\xampp\htdocs\b1gMailServer-main\b1gMailServer-main\src\imap\nonauth.cpp
Funktion: IMAP::Login (ab Zeile ~38)
Ersetzen:
- Aktuelle SQL-Prüfung gegen bm60_users.passwort (Zeilen ~61, ~68, ~76) entfernen.
Neu:
- User + Gruppe + IMAP-Recht ohne Passwort laden.
- Aktive App-Passwörter aus bm60_imap_app_passwords laden (revoked_at IS NULL).
- strPass gegen password_hash (Argon2id/bcrypt) verifizieren.
- Bei Erfolg wie bisher DoLogin().
2) IMAP-Hauptpasswort deaktivieren (AUTHENTICATE)
Datei: C:\xampp\htdocs\b1gMailServer-main\b1gMailServer-main\src\imap\nonauth.cpp
Funktion: IMAP::Authenticate (ab Zeile ~174)
Ersetzen:
- Aktuelle SQL-Prüfung gegen bm60_users.passwort (Zeilen ~270, ~277, ~285) entfernen.
Neu:
- Gleiche Logik wie bei LOGIN: User laden, App-Hash prüfen, bei Erfolg DoLogin().
3) last_used_at pflegen
Datei: C:\xampp\htdocs\b1gMailServer-main\b1gMailServer-main\src\imap\nonauth.cpp
Nach erfolgreichem Login zusätzlich:
- UPDATE bm60_imap_app_passwords SET last_used_at=UNIX_TIMESTAMP() WHERE id=%d
4) TLS für IMAP-Login erzwingen
Datei: C:\xampp\htdocs\b1gMailServer-main\b1gMailServer-main\src\imap\nonauth.cpp
In Login() und Authenticate() am Anfang:
- if (!this->bTLSMode) -> "NO ... TLS required" und return
Referenz TLS-Flag:
- C:\xampp\htdocs\b1gMailServer-main\b1gMailServer-main\src\imap\imap.h (bTLSMode)
5) Hash-Verify-Funktion ergänzen
Dateien:
- C:\xampp\htdocs\b1gMailServer-main\b1gMailServer-main\src\core\utils.h
- C:\xampp\htdocs\b1gMailServer-main\b1gMailServer-main\src\core\utils.cpp
Neu:
- bool VerifyPasswordHash(const std::string &plain, const std::string &hash);
Implementierung mit Argon2id oder bcrypt.
6) Neue Tabelle für IMAP-App-Passwörter
SQL:
CREATE TABLE bm60_imap_app_passwords (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
label VARCHAR(100) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at INT NOT NULL,
last_used_at INT NULL,
revoked_at INT NULL,
INDEX idx_user_active (user_id, revoked_at)
);
7) App-Passwort-Erzeugung + Einmalanzeige
Nicht im IMAP-C++-Server, sondern Web/Admin:
- Beim Aktivieren von IMAP automatisch App-Passwort erzeugen.
- Klartext nur 1x anzeigen.
- In DB ausschließlich password_hash + label + created_at + last_used_at + revoked_at speichern.
Alles anzeigen