fix(extensions): manifest id is not validated and is used as a path with recursive delete (path traversal)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 72/100
Piste de recherche
Read lib/core/extensions/models/extension_manifest.dart and the install paths in lib/core/extensions/local_extension_installer.dart; then inspect HttpMarketplaceRepository.install and uninstall for the corresponding path checks. Add the manifest ID validation and containment checks described in the issue, including the listed invalid IDs. Done means both installer paths reject traversal and the unit tests cover those IDs.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Problem
ExtensionManifest.fromJson reads the id as json['id'] as String with no validation (lib/core/extensions/models/extension_manifest.dart:114). The id is then used as a path segment:
LocalExtensionInstaller.installFromArchive:Directory(p.join(root.path, manifest.id)), and if it exists,extDir.delete(recursive: true)(lib/core/extensions/local_extension_installer.dart:123-128).HttpMarketplaceRepository.installanduninstall(extensionId):p.join(dir.path, manifest.id)/p.join(dir.path, extensionId),delete(recursive: true)in uninstall.
A sideloaded .qext with "id": "../../some/dir" makes the installer recursively delete a directory outside the extensions folder (and write the extracted files there). isArchiveEntryNameSafe only checks entry names inside the archive, not the manifest id.
Expected
- Validate the id in
ExtensionManifest.fromJson(e.g.^[A-Za-z0-9][A-Za-z0-9._-]*$, no separators, no..) and reject the manifest otherwise. - After
p.join, checkisArchiveExtractPathWithinRoot(root, extDir.path)before delete / create, in both installers and inuninstall. - Unit tests: ids
../x,a/b,..\x, absolute path, empty.
- Langage dominant
- Dart
- Étoiles
- 23
- Forks
- 1
- Merge moyen
- 31 min
- PR mergées (30 j)
- 570
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de QueryaHub/Querya-Desktop
-
enhancement ui
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
QueryaHub/Querya-Desktop#1689 ·
Les mainteneurs répondent en général sous 1 jour
-
ui(dialogs): make destructive query and DML preview dialogs adaptive and prevent table name overflowOuvertebug frontend
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
QueryaHub/Querya-Desktop#1642 ·
Les mainteneurs répondent en général sous 1 jour
-
bug error-handling settings
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
QueryaHub/Querya-Desktop#1637 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
QueryaHub/Querya-Desktop#1636 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement marketplace
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
QueryaHub/Querya-Desktop#1635 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de QueryaHub/Querya-Desktop
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Les mainteneurs répondent en général sous 1 jour
-
Not all highlighting kinds have examples in DartColorsAndFontsPagePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertegood-first-issue P3
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
flutter/dart-intellij-third-party#758 ·
Les mainteneurs répondent en général sous 1 jour
-
Bug: Incorrect location coordinates on logged Sound Meter dataPeut-être pris @Jashan32 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
area/archive bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
DarkFlippers/qUnleashed#374 ·
Les mainteneurs répondent en général sous 1 jour