Describe the bug
The filename parameter of the Context.FileAttachment function is not properly sanitized. A maliciously crafted filename can cause the Content-Disposition header to be sent with an unexpected filename value or otherwise modify the Content-Disposition header. For example, a filename of "setup.bat";x=.txt" will be sent as a file named "setup.bat". If the FileAttachment function is called with names provided by an untrusted source, this may permit an attacker to cause a file to be served with a name different than provided. Maliciously crafted attachment file name can modify the Content-Disposition header.
package main
import (
"github.com/gin-gonic/gin"
"go.elastic.co/apm/v2"
)
func main() {
r := gin.Default()
r.GET("/download", func(c *gin.Context) {
dir := "/Users/{CHANGE_PROJECT_DIRECTRY}/"
// Although the file name is hard-coded, we assume that the file name is actually determined by the DB or user input.
filename := "malicious.sh\";dummy=.txt"
c.FileAttachment(dir + filename, filename)
})
r.Run()
}
Describe the bug The filename parameter of the Context.FileAttachment function is not properly sanitized. A maliciously crafted filename can cause the Content-Disposition header to be sent with an unexpected filename value or otherwise modify the Content-Disposition header. For example, a filename of "setup.bat";x=.txt" will be sent as a file named "setup.bat". If the FileAttachment function is called with names provided by an untrusted source, this may permit an attacker to cause a file to be served with a name different than provided. Maliciously crafted attachment file name can modify the Content-Disposition header.
pull-request
forpatched
the vulnerable on #1620CWE-494
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N