Skip to content

Commit 9d08cd5

Browse files
authored
[CWS] Enforce selftests by checking the recieved event file path (#41137)
### What does this PR do? ### Motivation ### Describe how you validated your changes ### Additional Notes
1 parent 6d3b295 commit 9d08cd5

File tree

4 files changed

+47
-6
lines changed

4 files changed

+47
-6
lines changed

pkg/security/probe/selftests/chmod.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515

1616
"github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval"
1717
"github.com/DataDog/datadog-agent/pkg/security/secl/rules"
18+
"github.com/DataDog/datadog-agent/pkg/security/seclog"
1819
)
1920

2021
// ChmodSelfTest defines a chmod self test
@@ -51,7 +52,20 @@ func (o *ChmodSelfTest) GenerateEvent(ctx context.Context) error {
5152

5253
// HandleEvent handles self test events
5354
func (o *ChmodSelfTest) HandleEvent(event selfTestEvent) {
54-
o.isSuccess = event.RuleID == o.ruleID
55+
if event.Event == nil ||
56+
event.Event.BaseEventSerializer == nil ||
57+
event.Event.BaseEventSerializer.FileEventSerializer == nil {
58+
seclog.Errorf("Chmod SelfTest event received with nil Event or File fields")
59+
o.isSuccess = false
60+
return
61+
}
62+
63+
// debug logs
64+
if event.RuleID == o.ruleID && o.filename != event.Event.BaseEventSerializer.FileEventSerializer.Path {
65+
seclog.Errorf("Chmod SelfTest event received with different filepaths: %s VS %s", o.filename, event.Event.BaseEventSerializer.FileEventSerializer.Path)
66+
}
67+
68+
o.isSuccess = event.RuleID == o.ruleID && o.filename == event.Event.BaseEventSerializer.FileEventSerializer.Path
5569
}
5670

5771
// IsSuccess return the state of the test

pkg/security/probe/selftests/chown.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616

1717
"github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval"
1818
"github.com/DataDog/datadog-agent/pkg/security/secl/rules"
19+
"github.com/DataDog/datadog-agent/pkg/security/seclog"
1920
)
2021

2122
// ChownSelfTest defines a chown self test
@@ -57,7 +58,20 @@ func (o *ChownSelfTest) GenerateEvent(ctx context.Context) error {
5758

5859
// HandleEvent handles self test events
5960
func (o *ChownSelfTest) HandleEvent(event selfTestEvent) {
60-
o.isSuccess = event.RuleID == o.ruleID
61+
if event.Event == nil ||
62+
event.Event.BaseEventSerializer == nil ||
63+
event.Event.BaseEventSerializer.FileEventSerializer == nil {
64+
seclog.Errorf("Chown SelfTest event received with nil Event or File fields")
65+
o.isSuccess = false
66+
return
67+
}
68+
69+
// debug logs
70+
if event.RuleID == o.ruleID && o.filename != event.Event.BaseEventSerializer.FileEventSerializer.Path {
71+
seclog.Errorf("Chown SelfTest event received with different filepaths: %s VS %s", o.filename, event.Event.BaseEventSerializer.FileEventSerializer.Path)
72+
}
73+
74+
o.isSuccess = event.RuleID == o.ruleID && o.filename == event.Event.BaseEventSerializer.FileEventSerializer.Path
6175
}
6276

6377
// IsSuccess return the state of the test

pkg/security/probe/selftests/open.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515

1616
"github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval"
1717
"github.com/DataDog/datadog-agent/pkg/security/secl/rules"
18+
"github.com/DataDog/datadog-agent/pkg/security/seclog"
1819
)
1920

2021
// OpenSelfTest defines an open self test
@@ -51,7 +52,20 @@ func (o *OpenSelfTest) GenerateEvent(ctx context.Context) error {
5152

5253
// HandleEvent handles self test events
5354
func (o *OpenSelfTest) HandleEvent(event selfTestEvent) {
54-
o.isSuccess = event.RuleID == o.ruleID
55+
if event.Event == nil ||
56+
event.Event.BaseEventSerializer == nil ||
57+
event.Event.BaseEventSerializer.FileEventSerializer == nil {
58+
seclog.Errorf("Open SelfTest event received with nil Event or File fields")
59+
o.isSuccess = false
60+
return
61+
}
62+
63+
// debug logs
64+
if event.RuleID == o.ruleID && o.filename != event.Event.BaseEventSerializer.FileEventSerializer.Path {
65+
seclog.Errorf("Open SelfTest event received with different filepaths: %s VS %s", o.filename, event.Event.BaseEventSerializer.FileEventSerializer.Path)
66+
}
67+
68+
o.isSuccess = event.RuleID == o.ruleID && o.filename == event.Event.BaseEventSerializer.FileEventSerializer.Path
5569
}
5670

5771
// IsSuccess return the state of the test

pkg/security/probe/selftests/tester.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,9 +234,8 @@ func (t *SelfTester) endSelfTests() {
234234
}
235235

236236
type selfTestEvent struct {
237-
RuleID eval.RuleID
238-
Filepath string
239-
Event *serializers.EventSerializer
237+
RuleID eval.RuleID
238+
Event *serializers.EventSerializer
240239
}
241240

242241
// IsExpectedEvent sends an event to the tester

0 commit comments

Comments
 (0)