Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
5f57f486
Unverified
Commit
5f57f486
authored
Nov 05, 2025
by
Florian Dewald
Committed by
GitHub
Nov 05, 2025
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(security): validate attachment filenames (#5218)
parent
1d7efb15
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
0 deletions
+21
-0
attachment_service.go
server/router/api/v1/attachment_service.go
+21
-0
No files found.
server/router/api/v1/attachment_service.go
View file @
5f57f486
...
@@ -64,6 +64,9 @@ func (s *APIV1Service) CreateAttachment(ctx context.Context, request *v1pb.Creat
...
@@ -64,6 +64,9 @@ func (s *APIV1Service) CreateAttachment(ctx context.Context, request *v1pb.Creat
if
request
.
Attachment
.
Filename
==
""
{
if
request
.
Attachment
.
Filename
==
""
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"filename is required"
)
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"filename is required"
)
}
}
if
!
validateFilename
(
request
.
Attachment
.
Filename
)
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"filename contains invalid characters or format"
)
}
if
request
.
Attachment
.
Type
==
""
{
if
request
.
Attachment
.
Type
==
""
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"type is required"
)
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"type is required"
)
}
}
...
@@ -325,6 +328,9 @@ func (s *APIV1Service) UpdateAttachment(ctx context.Context, request *v1pb.Updat
...
@@ -325,6 +328,9 @@ func (s *APIV1Service) UpdateAttachment(ctx context.Context, request *v1pb.Updat
}
}
for
_
,
field
:=
range
request
.
UpdateMask
.
Paths
{
for
_
,
field
:=
range
request
.
UpdateMask
.
Paths
{
if
field
==
"filename"
{
if
field
==
"filename"
{
if
!
validateFilename
(
request
.
Attachment
.
Filename
)
{
return
nil
,
status
.
Errorf
(
codes
.
InvalidArgument
,
"filename contains invalid characters or format"
)
}
update
.
Filename
=
&
request
.
Attachment
.
Filename
update
.
Filename
=
&
request
.
Attachment
.
Filename
}
}
}
}
...
@@ -701,3 +707,18 @@ func setResponseHeaders(ctx context.Context, headers map[string]string) error {
...
@@ -701,3 +707,18 @@ func setResponseHeaders(ctx context.Context, headers map[string]string) error {
}
}
return
grpc
.
SetHeader
(
ctx
,
metadata
.
Pairs
(
pairs
...
))
return
grpc
.
SetHeader
(
ctx
,
metadata
.
Pairs
(
pairs
...
))
}
}
func
validateFilename
(
filename
string
)
bool
{
// Reject path traversal attempts and make sure no additional directories are created
if
!
filepath
.
IsLocal
(
filename
)
||
strings
.
ContainsAny
(
filename
,
"/
\\
"
)
{
return
false
}
// Reject filenames starting or ending with spaces or periods
if
strings
.
HasPrefix
(
filename
,
" "
)
||
strings
.
HasSuffix
(
filename
,
" "
)
||
strings
.
HasPrefix
(
filename
,
"."
)
||
strings
.
HasSuffix
(
filename
,
"."
)
{
return
false
}
return
true
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment