premisa


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.Navigatefile://

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

imagen

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() }

imagen

imagen

Link de referencia

  • https://huntr.dev/bounties/c1952c59-c196-440d-b41f-ce137fb183a1/

FINAL

imagen
Escanea el código para seguirnos
Nacido de un sueño, como un ciervo que vuelve al bosque