Skip to content

Commit

Permalink
Refactoring to reduce nesting
Browse files Browse the repository at this point in the history
  • Loading branch information
Yevhen Zavhorodnii committed Jun 4, 2024
1 parent 87b4108 commit c08414b
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,26 +46,29 @@ func (r *UnguardedDirectDatastoreAccessRule) GenerateRisks(input *types.Model) (
risks := make([]*types.Risk, 0)
for _, id := range input.SortedTechnicalAssetIDs() {
technicalAsset := input.TechnicalAssets[id]
if !technicalAsset.OutOfScope && technicalAsset.Type == types.Datastore {
for _, incomingAccess := range input.IncomingTechnicalCommunicationLinksMappedByTargetId[technicalAsset.Id] {
sourceAsset := input.TechnicalAssets[incomingAccess.SourceId]
if technicalAsset.Technologies.GetAttribute(types.IsIdentityStore) && sourceAsset.Technologies.GetAttribute(types.IdentityProvider) {
continue
}

acrossTrustBoundaryNetworkOnly := incomingAccess.IsAcrossTrustBoundaryNetworkOnly(input)
sharingSameParentTrustBoundary := isSharingSameParentTrustBoundary(input, technicalAsset, sourceAsset)

if technicalAsset.Confidentiality >= types.Confidential || technicalAsset.Integrity >= types.Critical {
if acrossTrustBoundaryNetworkOnly && !fileServerAccessViaFTP(technicalAsset, incomingAccess) &&
incomingAccess.Usage != types.DevOps && !sharingSameParentTrustBoundary {
highRisk := technicalAsset.Confidentiality == types.StrictlyConfidential ||
technicalAsset.Integrity == types.MissionCritical
risks = append(risks, r.createRisk(technicalAsset, incomingAccess,
input.TechnicalAssets[incomingAccess.SourceId], highRisk))
}
}
if technicalAsset.OutOfScope || technicalAsset.Type != types.Datastore {
continue
}
for _, incomingAccess := range input.IncomingTechnicalCommunicationLinksMappedByTargetId[technicalAsset.Id] {
sourceAsset := input.TechnicalAssets[incomingAccess.SourceId]
if technicalAsset.Technologies.GetAttribute(types.IsIdentityStore) && sourceAsset.Technologies.GetAttribute(types.IdentityProvider) {
continue
}
if technicalAsset.Confidentiality < types.Confidential && technicalAsset.Integrity < types.Critical {
continue
}
if incomingAccess.Usage == types.DevOps {
continue
}
if !incomingAccess.IsAcrossTrustBoundaryNetworkOnly(input) || fileServerAccessViaFTP(technicalAsset, incomingAccess) ||
isSharingSameParentTrustBoundary(input, technicalAsset, sourceAsset) {
continue
}

highRisk := technicalAsset.Confidentiality == types.StrictlyConfidential ||
technicalAsset.Integrity == types.MissionCritical
risks = append(risks, r.createRisk(technicalAsset, incomingAccess,
input.TechnicalAssets[incomingAccess.SourceId], highRisk))
}
}
return risks, nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -409,3 +409,21 @@ func TestIsSharingSameParentTrustBoundaryInDifferentTrustBoundariesExpectFalse(t
}
assert.False(t, isSharingSameParentTrustBoundary(input, left, right))
}

func TestIsSharingSameParentTrustBoundarySameTrustBoundariesExpectTrue(t *testing.T) {
input := &types.Model{
TrustBoundaries: map[string]*types.TrustBoundary{
"tb1": {
Id: "tb1",
TechnicalAssetsInside: []string{"ta1", "ta2"},
},
},
}
left := &types.TechnicalAsset{
Id: "ta1",
}
right := &types.TechnicalAsset{
Id: "ta2",
}
assert.True(t, isSharingSameParentTrustBoundary(input, left, right))
}

0 comments on commit c08414b

Please sign in to comment.