Descargo de responsabilidad: el contenido de este artículo es solo para el aprendizaje y la comunicación. Todas las consecuencias adversas causadas por la difusión y el uso de tecnologías relacionadas en el artículo son responsabilidad del usuario y no tienen nada que ver con esta cuenta oficial y el autor de la artículo. Si necesita reimprimir, indique la fuente, y el contenido de este artículo no puede eliminarse sin el permiso del autor.
información de vulnerabilidad
-
Tipo de vulnerabilidad: cruce de directorio
-
Versión vulnerable: gitea anterior a 0.2.0
-
Introducción a la vulnerabilidad: solicitudes de red sin filtrar
Introducción al repositorio
doctron es un servidor que proporciona la función html a pdf y actualmente tiene 266 estrellas
Análisis de vulnerabilidad
La llamada doctron inicia una solicitud de URL sin filtrar el protocolo, lo que da como resultado la lectura de cualquier archivo localchromedp.Navigate
file://
func (ins *html2pdf) Convert() ([]byte, error) {
start := time.Now()
defer func() {
ins.convertElapsed = time.Since(start)
}()
var params PDFParams
params, ok := ins.cc.Params.(PDFParams)
if !ok {
return nil, errors.New("wrong pdf params given")
}
ctx, cancel := chromedp.NewContext(ins.ctx)
defer cancel()
if err := chromedp.Run(ctx,
chromedp.Navigate(ins.cc.Url),
chromedp.Sleep(time.Duration(params.WaitingTime)*time.Millisecond),
chromedp.ActionFunc(func(ctx context.Context) error {
var err error
ins.buf, _, err = params.Do(ctx)
return err
}),
); err != nil {
return nil, err
}
return ins.buf, nil
}
Método de reparación
Se agregó un método para validar la url.CheckParams
El contenido del método es el siguiente, para juzgar y filtrar el tipo de protocolo de la url
func CheckParams(ctx iris.Context) {
webUrl := ctx.URLParam("url")
...
u, err := url.Parse(webUrl)
...
if u.Scheme != "http" && u.Scheme != "https" {
outputDTO := common.NewDefaultOutputDTO(nil)
outputDTO.Code = common.InvalidUrlScheme
_, _ = common.NewJsonOutput(ctx, outputDTO)
return
}
ctx.Next()
}
Link de referencia
-
https://huntr.dev/bounties/c1952c59-c196-440d-b41f-ce137fb183a1/
