Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix by-component implemented requirement checks #796

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions features/fedramp_extensions.feature
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ Examples:
| attachment-type-PASS.yaml |
| authorization-type-FAIL.yaml |
| authorization-type-PASS.yaml |
| by-component-requirement-not-inside-statement-FAIL.yaml |
| by-component-requirement-not-inside-statement-PASS.yaml |
| categorization-has-correct-system-attribute-FAIL.yaml |
| categorization-has-correct-system-attribute-PASS.yaml |
| categorization-has-information-type-id-FAIL.yaml |
Expand Down Expand Up @@ -165,6 +167,7 @@ Examples:
| address-type |
| attachment-type |
| authorization-type |
| by-component-requirement-not-inside-statement |
| categorization-has-correct-system-attribute |
| categorization-has-information-type-id |
| cloud-service-model |
Expand Down
36 changes: 18 additions & 18 deletions src/validations/constraints/content/ssp-all-VALID.xml
Original file line number Diff line number Diff line change
Expand Up @@ -213,31 +213,31 @@
<prop name="control-origination" value="sp-system" ns="https://fedramp.gov/ns/oscal"/>
<prop name="implementation-status" value="partial" ns="https://fedramp.gov/ns/oscal"/>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Rene2mt, I was working on this later last week and I was surprised this bug fix is a little more confusing than I had once thought. I have a question about how we came to have the prop[@name="implementation-status"] and not use the dedicated implementation-status assembly? I have been gone a while, but this the prop is also thoroughly documented on our site and the primary implementation-status (not the prop) is not documented at all.

Do you know if there was/is a reason for this? It is not immediately related to the PR but tests kept failing as I moved that around and this led me to scratch my head.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the prop[@name="implementation-status"] prop was created because FedRAMP needed a way to specify and/or determine the overall status for a control at the control-implementation/implemented-requirement level. This prop was also to support scenarios where control-implementation/implemented-requirement a control has needs to have more than one status specified (e.g., "partial" and "planned"). There is some documentation around this, but it needs to be expanded to clarify the use of the "implementation-status" prop at the implemented-requirement level versus the use of the implementation-status assembly at the by-component level.

New issue #802 is going to explore the scenarios and options for implementation status in FedRAMP OSCAL SSPs. We'll probably draft an ADR for that.

<statement statement-id="ac-1_stmt.a" uuid="99999999-0000-4000-9000-000000000009">
<by-component component-uuid="55555555-0000-4000-9000-000000000005" uuid="aaaaaaaa-0000-4000-9000-00000000000a">
<description>
<p>Access Control Policy and Procedures (AC-1) is fully implemented in our system.</p>
</description>
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="implemented"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the implementations-status assembly inside the by-component, however, it is optional.

Suggested change
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="implemented"/>

<responsible-role role-id="system-admin">
<party-uuid>11111111-0000-4000-9000-000000000001</party-uuid>
</responsible-role>
</by-component>
</statement>
<by-component component-uuid="55555555-0000-4000-9000-000000000005" uuid="aaaaaaaa-0000-4000-9000-00000000000a">
<description>
<p>Access Control Policy and Procedures (AC-1) is fully implemented in our system.</p>
</description>
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="implemented"/>
<responsible-role role-id="system-admin">
<party-uuid>11111111-0000-4000-9000-000000000001</party-uuid>
</responsible-role>
</by-component>
</implemented-requirement>

<implemented-requirement uuid="bbbbbbbb-0000-4000-9000-00000000000b" control-id="cm-8">
<prop name="control-origination" value="sp-system" ns="https://fedramp.gov/ns/oscal"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<prop name="control-origination" value="sp-system" ns="https://fedramp.gov/ns/oscal"/>
<prop name="control-origination" value="sp-system" ns="https://fedramp.gov/ns/oscal"/>
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="partial"/>

<statement statement-id="cm-8_stmt.a" uuid="cccccccc-0000-4000-9000-00000000000c">
<by-component component-uuid="55555555-0000-4000-9000-000000000005" uuid="dddddddd-0000-4000-9000-00000000000d">
<description>
<p>Information System Component Inventory (CM-8) is partially implemented.</p>
</description>
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="partial"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the implementations-status assembly inside the by-component, however, it is optional.

Suggested change
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="partial"/>

<responsible-role role-id="system-admin">
<party-uuid>11111111-0000-4000-9000-000000000001</party-uuid>
</responsible-role>
</by-component>
</statement>
<by-component component-uuid="55555555-0000-4000-9000-000000000005" uuid="dddddddd-0000-4000-9000-00000000000d">
<description>
<p>Information System Component Inventory (CM-8) is partially implemented.</p>
</description>
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="partial"/>
<responsible-role role-id="system-admin">
<party-uuid>11111111-0000-4000-9000-000000000001</party-uuid>
</responsible-role>
</by-component>
</implemented-requirement>
</control-implementation>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<system-security-plan xmlns="http://csrc.nist.gov/ns/oscal/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" uuid="12345678-1234-4321-8765-123456789012">
<control-implementation>
<description>
<p>Implementation of controls for the Enhanced Example System</p>
</description>
<implemented-requirement uuid="88888888-0000-4000-9000-000000000008" control-id="ac-1">
<prop name="control-origination" value="sp-system" ns="https://fedramp.gov/ns/oscal"/>
<prop name="implementation-status" value="partial" ns="https://fedramp.gov/ns/oscal"/>
<statement statement-id="ac-1_stmt.a" uuid="99999999-0000-4000-9000-000000000009">
</statement>
<by-component component-uuid="55555555-0000-4000-9000-000000000005" uuid="aaaaaaaa-0000-4000-9000-00000000000a">
<description>
<p>Access Control Policy and Procedures (AC-1) is fully implemented in our system.</p>
</description>
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="implemented"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="implemented"/>

<responsible-role role-id="system-admin">
<party-uuid>11111111-0000-4000-9000-000000000001</party-uuid>
</responsible-role>
</by-component>
</implemented-requirement>
<implemented-requirement uuid="bbbbbbbb-0000-4000-9000-00000000000b" control-id="cm-8">
<prop name="control-origination" value="sp-system" ns="https://fedramp.gov/ns/oscal"/>
<statement statement-id="cm-8_stmt.a" uuid="cccccccc-0000-4000-9000-00000000000c">
</statement>
<by-component component-uuid="55555555-0000-4000-9000-000000000005" uuid="dddddddd-0000-4000-9000-00000000000d">
<description>
<p>Information System Component Inventory (CM-8) is partially implemented.</p>
</description>
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="partial"/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<prop ns="https://fedramp.gov/ns/oscal" name="implementation-status" value="partial"/>

<responsible-role role-id="system-admin">
<party-uuid>11111111-0000-4000-9000-000000000001</party-uuid>
</responsible-role>
</by-component>
</implemented-requirement>
</control-implementation>
</system-security-plan>
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,10 @@
<context>
<metapath target="/system-security-plan/control-implementation"/>
<constraints>
<expect id="missing-response-components" target="implemented-requirement" test="count(./by-component) gt 0">
<expect id="by-component-requirement-not-inside-statement" target="implemented-requirement" test="not(exists(by-component))">
<message>A FedRAMP SSP MUST document only a component-based implemented requirement within a specific statement, not at the control level.</message>
</expect>
<expect id="missing-response-components" target="implemented-requirement/statement" test="count(./by-component) gt 0">
Comment on lines +195 to +198
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<expect id="by-component-requirement-not-inside-statement" target="implemented-requirement" test="not(exists(by-component))">
<message>A FedRAMP SSP MUST document only a component-based implemented requirement within a specific statement, not at the control level.</message>
</expect>
<expect id="missing-response-components" target="implemented-requirement/statement" test="count(./by-component) gt 0">
<expect id="by-component-requirement-not-inside-statement" target="implemented-requirement" test="not(exists(by-component))" level="ERROR">
<message>A FedRAMP SSP MUST document only a component-based implemented requirement within a specific statement, not at the control level.</message>
</expect>
<expect id="missing-response-components" target="implemented-requirement/statement" test="count(./by-component) gt 0" level="ERROR">

<message>Each implemented requirement must have at least one by-component reference to the source component implementing it.</message>
</expect>
</constraints>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
test-case:
name: Negative Test for by-component-requirement-not-inside-statement
description: >-
This test case validates the behavior of constraint
by-component-requirement-not-inside-statement
content: ../content/ssp-by-component-requirement-not-inside-statement-INVALID.xml
expectations:
- constraint-id: by-component-requirement-not-inside-statement
result: fail
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
test-case:
name: Positive Test for by-component-requirement-not-inside-statement
description: >-
This test case validates the behavior of constraint
by-component-requirement-not-inside-statement
content: ../content/ssp-all-VALID.xml
expectations:
- constraint-id: by-component-requirement-not-inside-statement
result: pass
Loading