Prämisse


Haftungsausschluss: Der Inhalt dieses Artikels dient nur zum Lernen und zur Kommunikation. Alle nachteiligen Folgen, die durch die Verbreitung und Verwendung verwandter Technologien in dem Artikel verursacht werden, liegen in der Verantwortung des Benutzers und haben nichts mit diesem offiziellen Konto und dem Autor des zu tun Artikel. Wenn Sie einen Nachdruck benötigen, geben Sie bitte die Quelle an, und der Inhalt dieses Artikels darf nicht ohne die Erlaubnis des Autors gelöscht werden.




Informationen zu Schwachstellen

  • Schwachstellentyp: Directory Traversal

  • Verwundbare Version: gitea vor 0.2.0

  • Einführung in die Schwachstelle: Ungefilterte Netzwerkanfragen



Einführung in Repos

doctron ist ein Server, der HTML-zu-PDF-Funktionen bereitstellt und derzeit 266 Sterne hat



Schwachstellenanalyse

Der Doctron-Aufruf initiiert eine URL-Anfrage, ohne das Protokoll zu filtern, was zum Lesen einer beliebigen lokalen Datei führtchromedp.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 }

Reparaturmethode

Methode zur Validierung der URL hinzugefügtCheckParams

Bild

Der Inhalt der Methode ist wie folgt, um den Protokolltyp der URL zu beurteilen und zu filtern

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

Bild

Bild

Referenzlink

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

ENDE

Bild
Scannen Sie den Code, um uns zu folgen
Geboren aus einem Traum, wie ein Reh, das in den Wald zurückkehrt