udap_security_test_kit 0.11.5 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/udap_security_test_kit/authorization_code_received_test.rb +8 -0
- data/lib/udap_security_test_kit/authorization_code_redirect_test.rb +3 -0
- data/lib/udap_security_test_kit/authorization_code_token_exchange_test.rb +2 -0
- data/lib/udap_security_test_kit/authorization_endpoint_field_test.rb +5 -1
- data/lib/udap_security_test_kit/client_suite/access_ac_group.rb +2 -0
- data/lib/udap_security_test_kit/client_suite/authorization_request_verification_test.rb +5 -0
- data/lib/udap_security_test_kit/client_suite/registration_ac_verification_test.rb +34 -0
- data/lib/udap_security_test_kit/client_suite/registration_cc_verification_test.rb +30 -0
- data/lib/udap_security_test_kit/client_suite/token_request_ac_verification_test.rb +47 -0
- data/lib/udap_security_test_kit/client_suite/token_request_cc_verification_test.rb +25 -0
- data/lib/udap_security_test_kit/client_suite.rb +11 -0
- data/lib/udap_security_test_kit/discovery_group.rb +2 -0
- data/lib/udap_security_test_kit/dynamic_client_registration_group.rb +3 -0
- data/lib/udap_security_test_kit/endpoints/mock_udap_server.rb +2 -2
- data/lib/udap_security_test_kit/grant_types_supported_field_test.rb +3 -0
- data/lib/udap_security_test_kit/reg_endpoint_jwt_signing_alg_values_supported_field_test.rb +6 -0
- data/lib/udap_security_test_kit/registration_endpoint_field_test.rb +3 -0
- data/lib/udap_security_test_kit/registration_failure_invalid_contents_test.rb +4 -1
- data/lib/udap_security_test_kit/registration_failure_invalid_jwt_signature_test.rb +2 -0
- data/lib/udap_security_test_kit/registration_success_contents_test.rb +3 -0
- data/lib/udap_security_test_kit/registration_success_test.rb +3 -0
- data/lib/udap_security_test_kit/requirements/generated/udap-security-test-kit_requirements_coverage.csv +317 -0
- data/lib/udap_security_test_kit/requirements/generated/udap_security_client_requirements_coverage.csv +146 -0
- data/lib/udap_security_test_kit/requirements/generated/udap_security_requirements_coverage.csv +164 -0
- data/lib/udap_security_test_kit/requirements/hl7.fhir.us.udap-security_1.0.0_reqs.xlsx +0 -0
- data/lib/udap_security_test_kit/requirements/udap_security_test_kit_requirements.csv +308 -0
- data/lib/udap_security_test_kit/signed_metadata_contents_test.rb +17 -0
- data/lib/udap_security_test_kit/signed_metadata_field_test.rb +4 -1
- data/lib/udap_security_test_kit/token_endpoint_auth_methods_supported_field_test.rb +2 -0
- data/lib/udap_security_test_kit/token_endpoint_auth_signing_alg_values_supported_field_test.rb +5 -0
- data/lib/udap_security_test_kit/token_endpoint_field_test.rb +3 -0
- data/lib/udap_security_test_kit/udap_auth_extensions_required_field_test.rb +3 -0
- data/lib/udap_security_test_kit/udap_auth_extensions_supported_field_test.rb +3 -0
- data/lib/udap_security_test_kit/udap_certifications_required_field_test.rb +3 -0
- data/lib/udap_security_test_kit/udap_certifications_supported_field_test.rb +2 -0
- data/lib/udap_security_test_kit/udap_profiles_supported_field_test.rb +5 -0
- data/lib/udap_security_test_kit/udap_versions_supported_field_test.rb +2 -0
- data/lib/udap_security_test_kit/version.rb +2 -2
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/b2b_authorization_extension_object_test.rb +77 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/client_authorization_code_usage_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/client_security_csrf_protection_test.rb +50 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/cryptographic_algorithms_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/data_holder_auth_request_scope_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/idp_authentication_compliance_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/idp_supports_required_scopes_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/jti_reuse_prevention_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/metadata_interpretation_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/oauth2_protocol_compliance_test.rb +50 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/preferred_identity_provider_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/private_key_authentication_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/resource_holder_authentication_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/software_statement_registration_test.rb +49 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/token_request_authentication_test.rb +51 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/trust_community_query_parameters_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client/validation_confidentiality_test.rb +49 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/client_attestation_group.rb +48 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authentication_requests_group/authentication_request_construction_test.rb +56 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authentication_requests_group/authentication_request_validation_test.rb +60 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authentication_requests_group.rb +13 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/access_token_lifetime_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/access_token_request_validation_test.rb +51 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/authorization_code_usage_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/resource_holder_authorization_flow_test.rb +37 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group.rb +17 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/client_authentication_group/client_certificate_storage_test.rb +36 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/client_authentication_group/no_client_credentials_native_apps_test.rb +38 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/client_authentication_group.rb +13 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group/certification_handling_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group/client_id_modification_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group/dynamic_client_registration_validation_test.rb +48 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group.rb +15 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/deny_token_request_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/general_error_response_test.rb +39 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/invalid_id_token_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/invalid_idp_test.rb +39 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/invalid_redirection_uri_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/prompt_none_test.rb +39 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/state_mismatch_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/unauthenticated_user_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/valid_state_error_response_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group.rb +27 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group/access_token_validation_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group/id_token_validation_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group/token_response_validation_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group.rb +15 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_authentication_request_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_dynamic_registration_test.rb +45 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_metadata_validation_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_token_exchange_test.rb +46 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group.rb +17 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_certificate_chain_validation_test.rb +36 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_grant_parameter_validation_test.rb +36 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_jti_reuse_test.rb +35 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_signature_validation_test.rb +36 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_token_request_validation_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group.rb +19 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_authorization_extensions_required_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_community_parameter_support_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_metadata_endpoint_error_handling_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_metadata_representation_test.rb +42 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_profiles_supported_test.rb +43 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group.rb +19 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/csrf_protection_test.rb +49 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/obtain_authorization_scopes_test.rb +44 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/state_parameter_test.rb +48 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/unauthenticated_client_security_test.rb +47 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group.rb +17 -0
- data/lib/udap_security_test_kit/visual_inspection_and_attestation/server_attestation_group.rb +33 -0
- data/lib/udap_security_test_kit/well_known_endpoint_test.rb +4 -0
- data/lib/udap_security_test_kit.rb +10 -0
- metadata +85 -4
@@ -0,0 +1,42 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class UDAPMetadataRepresentationAttestationTest < Inferno::Test
|
3
|
+
title 'Represents server capabilities correctly'
|
4
|
+
id :udap_security_metadata_representation
|
5
|
+
description %(
|
6
|
+
Server's UDAP metadata endpoint correctly represents the server’s capabilities with respect to the UDAP
|
7
|
+
workflows described in the guide.
|
8
|
+
)
|
9
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@18'
|
10
|
+
|
11
|
+
input :udap_metadata_representation_correct,
|
12
|
+
title: 'UDAP Metadata and Server Capabilities: Represents server capabilities correctly',
|
13
|
+
description: %(
|
14
|
+
I attest that the server's UDAP metadata endpoint correctly represents the server’s capabilities with
|
15
|
+
respect to the UDAP workflows described in the guide.
|
16
|
+
),
|
17
|
+
type: 'radio',
|
18
|
+
default: 'false',
|
19
|
+
options: {
|
20
|
+
list_options: [
|
21
|
+
{
|
22
|
+
label: 'Yes',
|
23
|
+
value: 'true'
|
24
|
+
},
|
25
|
+
{
|
26
|
+
label: 'No',
|
27
|
+
value: 'false'
|
28
|
+
}
|
29
|
+
]
|
30
|
+
}
|
31
|
+
input :udap_metadata_representation_note,
|
32
|
+
title: 'Notes, if applicable:',
|
33
|
+
type: 'textarea',
|
34
|
+
optional: true
|
35
|
+
|
36
|
+
run do
|
37
|
+
assert udap_metadata_representation_correct == 'true',
|
38
|
+
'Server metadata does not correctly represent the server’s capabilities with respect to UDAP workflows.'
|
39
|
+
pass udap_metadata_representation_note if udap_metadata_representation_note.present?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class UDAPProfilesSupportedAttestationTest < Inferno::Test
|
3
|
+
title 'Includes supported profiles'
|
4
|
+
id :udap_security_profiles_supported
|
5
|
+
description %(
|
6
|
+
Server's UDAP metadata includes the `udap_profiles_supported` element with `udap_to` if the
|
7
|
+
server supports the user authentication workflow described in Section 6.
|
8
|
+
)
|
9
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@27'
|
10
|
+
|
11
|
+
input :udap_profiles_supported_correct,
|
12
|
+
title: 'UDAP Metadata and Server Capabilities: Includes supported profiles',
|
13
|
+
description: %(
|
14
|
+
I attest that the server's UDAP metadata includes the `udap_profiles_supported` element with `udap_to`
|
15
|
+
if the server supports the user authentication workflow described in Section 6.
|
16
|
+
),
|
17
|
+
type: 'radio',
|
18
|
+
default: 'false',
|
19
|
+
options: {
|
20
|
+
list_options: [
|
21
|
+
{
|
22
|
+
label: 'Yes',
|
23
|
+
value: 'true'
|
24
|
+
},
|
25
|
+
{
|
26
|
+
label: 'No',
|
27
|
+
value: 'false'
|
28
|
+
}
|
29
|
+
]
|
30
|
+
}
|
31
|
+
input :udap_profiles_supported_note,
|
32
|
+
title: 'Notes, if applicable:',
|
33
|
+
type: 'textarea',
|
34
|
+
optional: true
|
35
|
+
|
36
|
+
run do
|
37
|
+
assert udap_profiles_supported_correct == 'true',
|
38
|
+
'Server metadata does not include the `udap_profiles_supported` element with `udap_to` for UDAP
|
39
|
+
Tiered OAuth for User Authentication.'
|
40
|
+
pass udap_profiles_supported_note if udap_profiles_supported_note.present?
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative 'metadata_server_capabilities_group/udap_authorization_extensions_required_test'
|
2
|
+
require_relative 'metadata_server_capabilities_group/udap_community_parameter_support_test'
|
3
|
+
require_relative 'metadata_server_capabilities_group/udap_metadata_endpoint_error_handling_test'
|
4
|
+
require_relative 'metadata_server_capabilities_group/udap_metadata_representation_test'
|
5
|
+
require_relative 'metadata_server_capabilities_group/udap_profiles_supported_test'
|
6
|
+
|
7
|
+
module UDAPSecurityTestKit
|
8
|
+
class MetadataServerCapabilitiesAttestationGroup < Inferno::TestGroup
|
9
|
+
id :udap_server_v100_metadata_server_capabilities_group
|
10
|
+
title 'UDAP Metadata and Server Capabilities'
|
11
|
+
|
12
|
+
run_as_group
|
13
|
+
test from: :udap_security_authorization_extensions_required
|
14
|
+
test from: :udap_security_community_parameter_support
|
15
|
+
test from: :udap_security_metadata_error_handling
|
16
|
+
test from: :udap_security_metadata_representation
|
17
|
+
test from: :udap_security_profiles_supported
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class CSRFProtectionAttestationTest < Inferno::Test
|
3
|
+
title 'Implements CSRF and Clickjacking protection'
|
4
|
+
id :udap_security_csrf_protection
|
5
|
+
description %(
|
6
|
+
Authorization Server implements CSRF and Clickjacking protection as
|
7
|
+
described in [RFC6749](https://openid.net/specs/openid-connect-core-1_0.html#RFC6749),
|
8
|
+
including:
|
9
|
+
- Use of anti-CSRF tokens.
|
10
|
+
- Validation of `state` parameter to prevent cross-site request forgery.
|
11
|
+
)
|
12
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@278',
|
13
|
+
'hl7.fhir.us.udap-security_1.0.0@269'
|
14
|
+
|
15
|
+
input :csrf_protection_implemented,
|
16
|
+
title: 'Security Measures: Implements CSRF and Clickjacking protection',
|
17
|
+
description: %(
|
18
|
+
I attest that the Authorization Server implements CSRF and Clickjacking protection as
|
19
|
+
described in [RFC6749](https://openid.net/specs/openid-connect-core-1_0.html#RFC6749),
|
20
|
+
including:
|
21
|
+
- Use of anti-CSRF tokens.
|
22
|
+
- Validation of `state` parameter to prevent cross-site request forgery.
|
23
|
+
),
|
24
|
+
type: 'radio',
|
25
|
+
default: 'false',
|
26
|
+
options: {
|
27
|
+
list_options: [
|
28
|
+
{
|
29
|
+
label: 'Yes',
|
30
|
+
value: 'true'
|
31
|
+
},
|
32
|
+
{
|
33
|
+
label: 'No',
|
34
|
+
value: 'false'
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
38
|
+
input :csrf_protection_note,
|
39
|
+
title: 'Notes, if applicable:',
|
40
|
+
type: 'textarea',
|
41
|
+
optional: true
|
42
|
+
|
43
|
+
run do
|
44
|
+
assert csrf_protection_implemented == 'true',
|
45
|
+
'Authorization Server does not implement CSRF protection as described in RFC6749.'
|
46
|
+
pass csrf_protection_note if csrf_protection_note.present?
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class ObtainAuthorizationScopesAttestationTest < Inferno::Test
|
3
|
+
title 'Obtains user authorization for requested scopes'
|
4
|
+
id :udap_security_user_authorization
|
5
|
+
description %(
|
6
|
+
Resource Holder, after mapping the authenticated user, obtains authorization from the user for the scopes
|
7
|
+
requested by the client app, if such authorization is required, as per Section [4.5 of UDAP Tiered OAuth](https://www.udap.org/udap-user-auth-stu1.html),
|
8
|
+
returning to the workflow defined in [Section 4.1](https://hl7.org/fhir/us/udap-security/STU1/consumer.html#obtaining-an-authorization-code)
|
9
|
+
or [Section 5.1](https://hl7.org/fhir/us/udap-security/STU1/b2b.html#obtaining-an-authorization-code) of this
|
10
|
+
guide, for consumer-facing or B2B apps, respectively.
|
11
|
+
)
|
12
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@297'
|
13
|
+
|
14
|
+
input :user_authorization_correct,
|
15
|
+
title: 'Security Measures: Obtains user authorization for requested scopes',
|
16
|
+
description: %(
|
17
|
+
I attest that the Resource Holder, after mapping the authenticated user, obtains authorization from the
|
18
|
+
user for the scopes requested by the client app, if such authorization is required, as per Section
|
19
|
+
[4.5 of UDAP Tiered OAuth](https://www.udap.org/udap-user-auth-stu1.html), returning to the workflow
|
20
|
+
defined in [Section 4.1](https://hl7.org/fhir/us/udap-security/STU1/consumer.html#obtaining-an-authorization-code)
|
21
|
+
or [Section 5.1](https://hl7.org/fhir/us/udap-security/STU1/b2b.html#obtaining-an-authorization-code) of
|
22
|
+
this guide, for consumer-facing or B2B apps, respectively.
|
23
|
+
),
|
24
|
+
type: 'radio',
|
25
|
+
default: 'false',
|
26
|
+
options: {
|
27
|
+
list_options: [
|
28
|
+
{ label: 'Yes', value: 'true' },
|
29
|
+
{ label: 'No', value: 'false' }
|
30
|
+
]
|
31
|
+
}
|
32
|
+
input :user_authorization_note,
|
33
|
+
title: 'Notes, if applicable:',
|
34
|
+
type: 'textarea',
|
35
|
+
optional: true
|
36
|
+
|
37
|
+
run do
|
38
|
+
assert user_authorization_correct == 'true',
|
39
|
+
'Resource Holder does not obtain user authorization for the requested scopes after mapping the
|
40
|
+
authenticated user.'
|
41
|
+
pass user_authorization_note if user_authorization_note.present?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class StateParameterAttestationTest < Inferno::Test
|
3
|
+
title 'Manages state parameter securely'
|
4
|
+
id :udap_security_state_parameter_management
|
5
|
+
description %(
|
6
|
+
The Resource Holder:
|
7
|
+
- Generates its own random value for the state parameter (does not reuse the value provided by the Client App).
|
8
|
+
- Validates that the value of the state parameter in the query string matches the value it generated when the
|
9
|
+
user is redirected back from the IdP.
|
10
|
+
- Validates the value of the state parameter when receiving an error response from the IdP.
|
11
|
+
)
|
12
|
+
verifies_requirements(
|
13
|
+
'hl7.fhir.us.udap-security_1.0.0@254',
|
14
|
+
'hl7.fhir.us.udap-security_1.0.0@255',
|
15
|
+
'hl7.fhir.us.udap-security_1.0.0@270',
|
16
|
+
'hl7.fhir.us.udap-security_1.0.0@272'
|
17
|
+
)
|
18
|
+
|
19
|
+
input :state_parameter_management_correct,
|
20
|
+
title: 'Security Measures: Manages state parameter securely',
|
21
|
+
description: %(
|
22
|
+
I attest that the Resource Holder:
|
23
|
+
- Generates its own random value for the state parameter and does not reuse the value provided by the
|
24
|
+
Client App.
|
25
|
+
- Validates that the value of the state parameter in the query string matches the value it generated
|
26
|
+
when the user is redirected back from the IdP.
|
27
|
+
- Validates the value of the state parameter when receiving an error response from the IdP.
|
28
|
+
),
|
29
|
+
type: 'radio',
|
30
|
+
default: 'false',
|
31
|
+
options: {
|
32
|
+
list_options: [
|
33
|
+
{ label: 'Yes', value: 'true' },
|
34
|
+
{ label: 'No', value: 'false' }
|
35
|
+
]
|
36
|
+
}
|
37
|
+
input :state_parameter_management_note,
|
38
|
+
title: 'Notes, if applicable:',
|
39
|
+
type: 'textarea',
|
40
|
+
optional: true
|
41
|
+
|
42
|
+
run do
|
43
|
+
assert state_parameter_management_correct == 'true',
|
44
|
+
'Resource Holder does not properly generate or validate the state parameter as required.'
|
45
|
+
pass state_parameter_management_note if state_parameter_management_note.present?
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module UDAPSecurityTestKit
|
2
|
+
class UnauthenticatedClientSecurityAttestationTest < Inferno::Test
|
3
|
+
title 'Considers security measures for unauthenticated clients'
|
4
|
+
id :udap_security_unauthenticated_clients
|
5
|
+
description %(
|
6
|
+
I attest that the Authorization Server considers security implications when interacting with unauthenticated
|
7
|
+
clients, including:
|
8
|
+
- Restricting access to sensitive endpoints.
|
9
|
+
- Implementing rate limiting or other protective measures.
|
10
|
+
)
|
11
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@288'
|
12
|
+
|
13
|
+
input :unauthenticated_client_security_measures,
|
14
|
+
title: 'Security Measures: Considers security measures for unauthenticated clients',
|
15
|
+
description: %(
|
16
|
+
I attest that the Authorization Server considers security implications when interacting with unauthenticated
|
17
|
+
clients, including:
|
18
|
+
- Restricting access to sensitive endpoints.
|
19
|
+
- Implementing rate limiting or other protective measures.
|
20
|
+
),
|
21
|
+
type: 'radio',
|
22
|
+
default: 'false',
|
23
|
+
options: {
|
24
|
+
list_options: [
|
25
|
+
{
|
26
|
+
label: 'Yes',
|
27
|
+
value: 'true'
|
28
|
+
},
|
29
|
+
{
|
30
|
+
label: 'No',
|
31
|
+
value: 'false'
|
32
|
+
}
|
33
|
+
]
|
34
|
+
}
|
35
|
+
input :unauthenticated_client_security_note,
|
36
|
+
title: 'Notes, if applicable:',
|
37
|
+
type: 'textarea',
|
38
|
+
optional: true
|
39
|
+
|
40
|
+
run do
|
41
|
+
assert unauthenticated_client_security_measures == 'true',
|
42
|
+
'Authorization Server does not consider security implications when interacting with unauthenticated
|
43
|
+
clients.'
|
44
|
+
pass unauthenticated_client_security_note if unauthenticated_client_security_note.present?
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'security_measures_group/csrf_protection_test'
|
2
|
+
require_relative 'security_measures_group/state_parameter_test'
|
3
|
+
require_relative 'security_measures_group/obtain_authorization_scopes_test'
|
4
|
+
require_relative 'security_measures_group/unauthenticated_client_security_test'
|
5
|
+
|
6
|
+
module UDAPSecurityTestKit
|
7
|
+
class SecurityMeasuresAttestationGroup < Inferno::TestGroup
|
8
|
+
id :udap_server_v100_security_measures_group
|
9
|
+
title 'Security Measures'
|
10
|
+
|
11
|
+
run_as_group
|
12
|
+
test from: :udap_security_csrf_protection
|
13
|
+
test from: :udap_security_state_parameter_management
|
14
|
+
test from: :udap_security_unauthenticated_clients
|
15
|
+
test from: :udap_security_user_authorization
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'server/metadata_server_capabilities_group'
|
2
|
+
require_relative 'server/client_authentication_group'
|
3
|
+
require_relative 'server/dynamic_client_registration_group'
|
4
|
+
require_relative 'server/authorization_code_token_requests_group'
|
5
|
+
require_relative 'server/authentication_requests_group'
|
6
|
+
require_relative 'server/id_token_access_token_validation_group'
|
7
|
+
require_relative 'server/error_handling_group'
|
8
|
+
require_relative 'server/security_measures_group'
|
9
|
+
require_relative 'server/identity_provider_interaction_group'
|
10
|
+
require_relative 'server/jwt_security_group'
|
11
|
+
|
12
|
+
module UDAPSecurityTestKit
|
13
|
+
class ServerAttestationGroup < Inferno::TestGroup
|
14
|
+
id :udap_server_v100_visual_inspection_and_attestation
|
15
|
+
title 'Visual Inspection and Attestation'
|
16
|
+
optional
|
17
|
+
|
18
|
+
description <<~DESCRIPTION
|
19
|
+
Perform visual inspections or attestations to ensure that the Server is conformant to the UDAP IG requirements.
|
20
|
+
DESCRIPTION
|
21
|
+
|
22
|
+
group from: :udap_server_v100_metadata_server_capabilities_group
|
23
|
+
group from: :udap_server_v100_dynamic_client_registration_group
|
24
|
+
group from: :udap_server_v100_authorization_code_token_requests_group
|
25
|
+
group from: :udap_server_v100_authentication_requests_group
|
26
|
+
group from: :udap_server_v100_id_token_access_token_validation_group
|
27
|
+
group from: :udap_server_v100_error_handling_group
|
28
|
+
group from: :udap_server_v100_security_measures_group
|
29
|
+
group from: :udap_server_v100_client_authentication_group
|
30
|
+
group from: :udap_server_v100_jwt_security_group
|
31
|
+
group from: :udap_server_v100_identity_provider_interaction_group
|
32
|
+
end
|
33
|
+
end
|
@@ -28,6 +28,10 @@ module UDAPSecurityTestKit
|
|
28
28
|
output :udap_well_known_metadata_json
|
29
29
|
makes_request :config
|
30
30
|
|
31
|
+
verifies_requirements 'hl7.fhir.us.udap-security_1.0.0@12',
|
32
|
+
'hl7.fhir.us.udap-security_1.0.0@13',
|
33
|
+
'hl7.fhir.us.udap-security_1.0.0@14'
|
34
|
+
|
31
35
|
run do
|
32
36
|
uri = URI.parse("#{udap_fhir_base_url.strip.chomp('/')}/.well-known/udap")
|
33
37
|
unless udap_community_parameter.blank?
|
@@ -3,6 +3,7 @@ require_relative 'udap_security_test_kit/authorization_code_group'
|
|
3
3
|
require_relative 'udap_security_test_kit/client_credentials_group'
|
4
4
|
require_relative 'udap_security_test_kit/redirect_uri'
|
5
5
|
require_relative 'udap_security_test_kit/metadata'
|
6
|
+
require_relative 'udap_security_test_kit/visual_inspection_and_attestation/server_attestation_group'
|
6
7
|
|
7
8
|
module UDAPSecurityTestKit
|
8
9
|
class Suite < Inferno::TestSuite
|
@@ -32,6 +33,14 @@ module UDAPSecurityTestKit
|
|
32
33
|
(which is not a required capability).
|
33
34
|
)
|
34
35
|
|
36
|
+
requirement_sets(
|
37
|
+
{
|
38
|
+
identifier: 'hl7.fhir.us.udap-security_1.0.0',
|
39
|
+
title: 'Security for Scalable Registration, Authentication, and Authorization (UDAP)',
|
40
|
+
actor: 'Server'
|
41
|
+
}
|
42
|
+
)
|
43
|
+
|
35
44
|
input_instructions %(
|
36
45
|
This menu will execute tests for both OAuth flows.
|
37
46
|
|
@@ -85,5 +94,6 @@ module UDAPSecurityTestKit
|
|
85
94
|
|
86
95
|
group from: :udap_authorization_code_group
|
87
96
|
group from: :udap_client_credentials_group
|
97
|
+
group from: :udap_server_v100_visual_inspection_and_attestation
|
88
98
|
end
|
89
99
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: udap_security_test_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen MacVicar
|
@@ -9,22 +9,28 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2025-
|
12
|
+
date: 2025-07-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: inferno_core
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.0'
|
18
21
|
- - ">="
|
19
22
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.
|
23
|
+
version: 1.0.2
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
28
|
+
- - "~>"
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.0'
|
25
31
|
- - ">="
|
26
32
|
- !ruby/object:Gem::Version
|
27
|
-
version: 0.
|
33
|
+
version: 1.0.2
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
35
|
name: jwt
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,6 +116,11 @@ files:
|
|
110
116
|
- lib/udap_security_test_kit/registration_failure_invalid_jwt_signature_test.rb
|
111
117
|
- lib/udap_security_test_kit/registration_success_contents_test.rb
|
112
118
|
- lib/udap_security_test_kit/registration_success_test.rb
|
119
|
+
- lib/udap_security_test_kit/requirements/generated/udap-security-test-kit_requirements_coverage.csv
|
120
|
+
- lib/udap_security_test_kit/requirements/generated/udap_security_client_requirements_coverage.csv
|
121
|
+
- lib/udap_security_test_kit/requirements/generated/udap_security_requirements_coverage.csv
|
122
|
+
- lib/udap_security_test_kit/requirements/hl7.fhir.us.udap-security_1.0.0_reqs.xlsx
|
123
|
+
- lib/udap_security_test_kit/requirements/udap_security_test_kit_requirements.csv
|
113
124
|
- lib/udap_security_test_kit/scopes_supported_field_test.rb
|
114
125
|
- lib/udap_security_test_kit/signed_metadata_contents_test.rb
|
115
126
|
- lib/udap_security_test_kit/signed_metadata_field_test.rb
|
@@ -134,6 +145,76 @@ files:
|
|
134
145
|
- lib/udap_security_test_kit/udap_x509_certificate.rb
|
135
146
|
- lib/udap_security_test_kit/urls.rb
|
136
147
|
- lib/udap_security_test_kit/version.rb
|
148
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/b2b_authorization_extension_object_test.rb
|
149
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/client_authorization_code_usage_test.rb
|
150
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/client_security_csrf_protection_test.rb
|
151
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/cryptographic_algorithms_test.rb
|
152
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/data_holder_auth_request_scope_test.rb
|
153
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/idp_authentication_compliance_test.rb
|
154
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/idp_supports_required_scopes_test.rb
|
155
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/jti_reuse_prevention_test.rb
|
156
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/metadata_interpretation_test.rb
|
157
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/oauth2_protocol_compliance_test.rb
|
158
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/preferred_identity_provider_test.rb
|
159
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/private_key_authentication_test.rb
|
160
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/resource_holder_authentication_test.rb
|
161
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/software_statement_registration_test.rb
|
162
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/token_request_authentication_test.rb
|
163
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/trust_community_query_parameters_test.rb
|
164
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client/validation_confidentiality_test.rb
|
165
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/client_attestation_group.rb
|
166
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/authentication_requests_group.rb
|
167
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/authentication_requests_group/authentication_request_construction_test.rb
|
168
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/authentication_requests_group/authentication_request_validation_test.rb
|
169
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group.rb
|
170
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/access_token_lifetime_test.rb
|
171
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/access_token_request_validation_test.rb
|
172
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/authorization_code_usage_test.rb
|
173
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/authorization_code_token_requests_group/resource_holder_authorization_flow_test.rb
|
174
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/client_authentication_group.rb
|
175
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/client_authentication_group/client_certificate_storage_test.rb
|
176
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/client_authentication_group/no_client_credentials_native_apps_test.rb
|
177
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group.rb
|
178
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group/certification_handling_test.rb
|
179
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group/client_id_modification_test.rb
|
180
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/dynamic_client_registration_group/dynamic_client_registration_validation_test.rb
|
181
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group.rb
|
182
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/deny_token_request_test.rb
|
183
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/general_error_response_test.rb
|
184
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/invalid_id_token_test.rb
|
185
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/invalid_idp_test.rb
|
186
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/invalid_redirection_uri_test.rb
|
187
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/prompt_none_test.rb
|
188
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/state_mismatch_test.rb
|
189
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/unauthenticated_user_test.rb
|
190
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/error_handling_group/valid_state_error_response_test.rb
|
191
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group.rb
|
192
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group/access_token_validation_test.rb
|
193
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group/id_token_validation_test.rb
|
194
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/id_token_access_token_validation_group/token_response_validation_test.rb
|
195
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group.rb
|
196
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_authentication_request_test.rb
|
197
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_dynamic_registration_test.rb
|
198
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_metadata_validation_test.rb
|
199
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/identity_provider_interaction_group/idp_token_exchange_test.rb
|
200
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group.rb
|
201
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_certificate_chain_validation_test.rb
|
202
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_grant_parameter_validation_test.rb
|
203
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_jti_reuse_test.rb
|
204
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_signature_validation_test.rb
|
205
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/jwt_security_group/jwt_token_request_validation_test.rb
|
206
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group.rb
|
207
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_authorization_extensions_required_test.rb
|
208
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_community_parameter_support_test.rb
|
209
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_metadata_endpoint_error_handling_test.rb
|
210
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_metadata_representation_test.rb
|
211
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/metadata_server_capabilities_group/udap_profiles_supported_test.rb
|
212
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group.rb
|
213
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/csrf_protection_test.rb
|
214
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/obtain_authorization_scopes_test.rb
|
215
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/state_parameter_test.rb
|
216
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server/security_measures_group/unauthenticated_client_security_test.rb
|
217
|
+
- lib/udap_security_test_kit/visual_inspection_and_attestation/server_attestation_group.rb
|
137
218
|
- lib/udap_security_test_kit/well_known_endpoint_test.rb
|
138
219
|
homepage: https://github.com/inferno-framework/udap-security-test-kit
|
139
220
|
licenses:
|