Politique de sécurité
FRP Manager pilote des services réseau exposés à Internet (frps, frpc), des règles de pare-feu et, selon l'installation, le système hôte avec les droits root. Une faille dans le panel peut donc avoir des conséquences sérieuses : merci de la signaler de façon responsable.
Signaler une vulnérabilité
- Ne l'ouvrez pas en issue publique.
- Utilisez le signalement privé de GitHub : onglet Security du dépôt, bouton Report a vulnerability (lien direct).
- Indiquez la version du panel (en bas de la barre latérale), le mode d'installation (script ou Docker), les étapes pour reproduire et l'impact que vous envisagez.
Ce projet est maintenu bénévolement : comptez un accusé de réception sous 7 jours et, pour une faille confirmée, un correctif publié en pré-release dès que possible. Le signalement est crédité dans les notes de version si vous le souhaitez.
Versions prises en charge
| Version | Correctifs de sécurité |
|---|---|
Dernière release (:latest) | oui |
Dernière pré-release (:dev) | oui |
| Versions antérieures | non : mettez à jour |
Modèle de menace (résumé)
Ce que le panel protège
- L'accès à l'interface et à l'API : identifiant et mot de passe obligatoires (configuration initiale imposée au premier lancement), mot de passe haché en argon2id (deux calculs à la fois au plus), limitation des tentatives par IP, sessions HttpOnly / SameSite=Strict / Secure en HTTPS, jeton CSRF sur toute requête qui modifie quelque chose.
- Le navigateur de l'administrateur : Content-Security-Policy stricte pour les scripts (nonce), X-Frame-Options, échappement systématique des données (valeurs insérées dans les pages du serveur, DOM construit sans
innerHTML). - Le système : aucune commande passée à un shell avec des données saisies, noms de services et de conteneurs validés par liste blanche, configurations validées (TOML parsé) et confinées aux dossiers de configuration de frp, archives extraites sans
extractall(chemins, liens, taille contrôlés). - La chaîne d'approvisionnement : archives frp vérifiées par la somme SHA-256 publiée avec chaque release de fatedier/frp ; miroirs tiers (ghproxy, ghfast, gh-proxy) désactivables et jamais utilisés sans somme de contrôle ; archive de mise à jour du panel vérifiée par sa somme SHA-256 publiée.
Ce que le panel ne protège pas
- Un administrateur authentifié a, par conception, un pouvoir équivalent à root sur la machine : il installe des binaires, écrit des unités systemd, modifie le pare-feu. Protéger le mot de passe revient à protéger la machine.
- En Docker (
docker-compose.yml, mode autonome), frps et frpc tournent dans le conteneur : rien de l'hôte n'est monté, pas deprivileged, pas depid: host, pas de socket Docker (voir installation.fr.md). Le seul privilège en plus estNET_ADMIN, pour le pare-feu : sur le réseau de l'hôte, celui qui contrôle le panel peut modifier le réseau et les règles de pare-feu de la machine. SansNET_ADMIN, le conteneur ne peut rien changer au réseau de la machine. - Le certificat HTTPS généré est auto-signé : il chiffre, mais n'authentifie pas le serveur. Pour un accès depuis Internet, placez le panel derrière un reverse proxy avec un certificat valide, ou n'y accédez que par VPN ou tunnel SSH.
- Derrière un reverse proxy, la limitation des tentatives voit l'adresse du proxy : filtrez aussi l'accès à ce niveau.
- Les tokens frp sont stockés en clair dans les fichiers TOML, comme frp l'exige ; l'éditeur de configuration les affiche aux administrateurs.
- Port attribué par le serveur : frpc ne le donne que par son tableau de bord local (son API web). Le bouton « Afficher le port attribué » de la page Ports l'active, après confirmation, dans
frpc.toml: écoute sur127.0.0.1seulement, port libre à partir de 7400, utilisateurfrp-manageret mot de passe tiré au hasard, en clair dans le fichier comme le token. Qui a un accès local à la machine et ce mot de passe peut piloter frpc par cette API (recharger, lire ou modifier sa config). Rien n'est activé sans ce clic ; pour l'éviter, donnez un numéro au port. Pour le retirer : Réglages → Configuration de frpc, « Tableau de bord local ». - Les permissions marquées « sensible » reviennent à donner root sur la machine : modifier une configuration frp (les plugins frpc peuvent exposer des fichiers locaux), le pare-feu, installer frp, mettre à jour le panel, les réglages, les comptes. Ne les accordez qu'à qui vous donneriez un accès root. Un compte limité à certaines instances ne garde que les permissions sur ces instances, mais
config.writesur une seule instance reste sensible. - La connexion unique fait confiance au fournisseur d'identité : qui contrôle ses comptes ou ses groupes contrôle qui se connecte (et avec quel rôle, si les rôles suivent les groupes). Le jeton d'identité est reçu directement du point d'accès /token du fournisseur en HTTPS : sa signature n'est donc pas vérifiée (OpenID Connect Core §3.1.3.7) ; son émetteur, son audience, son expiration et son nonce le sont. Un compte n'est lié par e-mail que si le fournisseur indique l'e-mail comme vérifié.
- Passkeys (WebAuthn) : en ajouter une exige le mot de passe du compte ; se connecter exige que l'appareil vérifie l'utilisateur (biométrie ou code PIN). Le panel vérifie le défi (usage unique, 5 minutes), l'origine, le domaine sur lequel la passkey a été créée, la signature (ES256, EdDSA, RS256) et le compteur de signatures quand l'authentificateur en tient un. Le modèle de l'authentificateur n'est pas vérifié (attestation « none »). Les échecs de connexion par passkey comptent dans le verrouillage par IP, comme les mots de passe.
Recommandations
- Laissez le panel sur
127.0.0.1(valeur par défaut d'une nouvelle installation) et accédez-y par tunnel SSH, VPN ou reverse proxy. - Si vous l'ouvrez au réseau, créez l'identifiant immédiatement et filtrez l'accès par IP.
- Utilisez un mot de passe long et unique, et un token frp long et unique par serveur.
- Désactivez les miroirs tiers (Réglages → Accès au panel) si github.com vous est accessible.
Statistiques anonymes
Le panel n'envoie rien au projet tant que son administrateur n'a pas activé les statistiques anonymes (désactivées par défaut ; configuration initiale ou Réglages → Accès au panel). Une fois activées, il envoie une fois par jour seulement sa version, son architecture et son mode d'installation à https://frp-manager.org/api/ping : aucun identifiant, aucune adresse, aucune configuration frp. Le site ne garde que des compteurs journaliers et ne conserve pas les adresses IP. Détails : guide d'installation.
Base de données
Le panel n'utilise aucune base de données SQL : sa configuration est un fichier JSON (/etc/frp-manager/frp-manager.json, lisible par root seulement) et son état un autre (/var/lib/frp-manager/state.json). Il n'y a donc pas de surface d'injection SQL.