Field Types Specification

Overview

CFSE artifacts use consistent field types across all specifications. This document defines:

  • Identifier types with regex patterns
  • Enumeration types with allowed values
  • Composite types for structured data
  • Reference collections for lists of artifacts

These types are used in YAML frontmatter, JSON schemas, and validation tooling.


Identifier Types

ConceptID

Identifies a security concept artifact.

PropertyValue
Base Typestring
Pattern^C-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$
ExampleC-AWS-IAM-ROLE
yaml
# Schema definition
ConceptID:
  type: string
  pattern: "^C-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$"

InteractionID

Identifies an interaction artifact.

PropertyValue
Base Typestring
Pattern^I-[A-Z0-9]{2,8}-[A-Z]{1,16}-[A-Z]{1,16}-[0-9]{3}$
ExampleI-AWS-ASSUME-ROLE-001
yaml
# Schema definition
InteractionID:
  type: string
  pattern: "^I-[A-Z0-9]{2,8}-[A-Z]{1,16}-[A-Z]{1,16}-[0-9]{3}$"

FlowID

Identifies a flow artifact.

PropertyValue
Base Typestring
Pattern^F-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$
ExampleF-AWS-CROSS-ACCOUNT-ACCESS
yaml
# Schema definition
FlowID:
  type: string
  pattern: "^F-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$"

ScenarioID

Identifies a scenario artifact.

PropertyValue
Base Typestring
Pattern^S-[A-Z0-9]{2,8}-[A-Z0-9-]{1,24}-[0-9]{3}$
ExampleS-AWS-PRIVILEGE-ESCALATION-001
yaml
# Schema definition
ScenarioID:
  type: string
  pattern: "^S-[A-Z0-9]{2,8}-[A-Z0-9-]{1,24}-[0-9]{3}$"

ExplorationID

Identifies an exploration artifact.

PropertyValue
Base Typestring
Pattern^E-[A-Z0-9]{2,8}-[A-Z0-9-]{1,24}-[0-9]{3}-[0-9]{2}$
ExampleE-AWS-PRIVILEGE-ESCALATION-001-01
yaml
# Schema definition
ExplorationID:
  type: string
  pattern: "^E-[A-Z0-9]{2,8}-[A-Z0-9-]{1,24}-[0-9]{3}-[0-9]{2}$"

TraceID

Identifies a trace artifact.

PropertyValue
Base Typestring
Pattern^T-[A-Z0-9]{2,8}-[A-Z0-9-]{1,24}-[0-9]{3}-[0-9]{2}-[0-9]{2}$
ExampleT-AWS-PRIVILEGE-ESCALATION-001-01-02
yaml
# Schema definition
TraceID:
  type: string
  pattern: "^T-[A-Z0-9]{2,8}-[A-Z0-9-]{1,24}-[0-9]{3}-[0-9]{2}-[0-9]{2}$"

FindingID

Identifies a finding artifact.

PropertyValue
Base Typestring
Pattern^FD-[A-Z0-9]{2,8}-[A-Z]{1,16}-[0-9]{3}$
ExampleFD-AWS-AUTHZ-001
yaml
# Schema definition
FindingID:
  type: string
  pattern: "^FD-[A-Z0-9]{2,8}-[A-Z]{1,16}-[0-9]{3}$"

PredicateID

Identifies a predicate artifact.

PropertyValue
Base Typestring
Pattern^P-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$
ExampleP-AWS-HAS-MFA
yaml
# Schema definition
PredicateID:
  type: string
  pattern: "^P-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$"

InvariantID

Identifies an invariant artifact.

PropertyValue
Base Typestring
Pattern^INV-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$
ExampleINV-AWS-NO-PUBLIC-S3
yaml
# Schema definition
InvariantID:
  type: string
  pattern: "^INV-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$"

EntryPointID

Identifies an entry point (surface) artifact.

PropertyValue
Base Typestring
Pattern^EP-[A-Z0-9-]{1,128}$
ExampleEP-AWS-S3-BUCKET-API-READ
yaml
# Schema definition
EntryPointID:
  type: string
  pattern: "^EP-[A-Z0-9-]{1,128}$"

ProjectionID

Identifies a projection artifact.

PropertyValue
Base Typestring
Pattern^PRJ-[A-Z0-9-]{1,128}$
ExamplePRJ-AWS-ANON-S3-LIST
yaml
# Schema definition
ProjectionID:
  type: string
  pattern: "^PRJ-[A-Z0-9-]{1,128}$"

GeneratorID

Identifies a generator artifact.

PropertyValue
Base Typestring
Pattern^GEN-[A-Z0-9-]{1,24}-[0-9]{3}$
ExampleGEN-BOUNDARY-001
yaml
# Schema definition
GeneratorID:
  type: string
  pattern: "^GEN-[A-Z0-9-]{1,24}-[0-9]{3}$"

PatchID

Identifies a patch artifact.

PropertyValue
Base Typestring
Pattern^PATCH-[A-Z0-9]{2,8}-[0-9]{3}$
ExamplePATCH-AWS-001
yaml
# Schema definition
PatchID:
  type: string
  pattern: "^PATCH-[A-Z0-9]{2,8}-[0-9]{3}$"

ArtifactID (Union Type)

Any valid artifact identifier.

PropertyValue
Base Typestring
PatternUnion of all artifact patterns
ExampleAny valid artifact ID
yaml
# Schema definition
ArtifactID:
  oneOf:
    - $ref: "#/$defs/ConceptID"
    - $ref: "#/$defs/InteractionID"
    - $ref: "#/$defs/FlowID"
    - $ref: "#/$defs/ScenarioID"
    - $ref: "#/$defs/ExplorationID"
    - $ref: "#/$defs/TraceID"
    - $ref: "#/$defs/FindingID"
    - $ref: "#/$defs/PredicateID"
    - $ref: "#/$defs/InvariantID"
    - $ref: "#/$defs/GeneratorID"
    - $ref: "#/$defs/PatchID"

Enumeration Types

Criticality

Priority level for security artifacts.

ValueDescriptionResponse Time
P0Critical - Immediate action required< 24 hours
P1High - Urgent attention needed< 1 week
P2Medium - Plan remediation< 1 month
P3Low - Address when convenientBest effort
yaml
# Schema definition
Criticality:
  type: string
  enum: [P0, P1, P2, P3]

Verdict

Outcome of exploration or test execution.

ValueDescription
PASSTest passed, no security issues found
FAILTest failed, security issue confirmed
INCONCLUSIVEUnable to determine outcome
BLOCKEDTest could not be executed
SKIPPEDTest intentionally skipped
yaml
# Schema definition
Verdict:
  type: string
  enum: [PASS, FAIL, INCONCLUSIVE, BLOCKED, SKIPPED]

InvariantState

Current state of an invariant.

ValueDescription
HOLDSInvariant is satisfied
VIOLATEDInvariant is not satisfied
UNKNOWNState cannot be determined
NOT_APPLICABLEInvariant does not apply in context
yaml
# Schema definition
InvariantState:
  type: string
  enum: [HOLDS, VIOLATED, UNKNOWN, NOT_APPLICABLE]

ArtifactStatus

Lifecycle status of an artifact.

ValueDescription
DRAFTInitial creation, not reviewed
REVIEWUnder review
PLANNEDApproved future state (not yet current reality)
ACTIVEApproved and in use
DEPRECATEDBeing phased out
ARCHIVEDNo longer in use
yaml
# Schema definition
ArtifactStatus:
  type: string
  enum: [DRAFT, REVIEW, PLANNED, ACTIVE, DEPRECATED, ARCHIVED]

Extensions

Extension-specific fields, keyed by extension name.

This field exists to allow CFSE corpora to attach extension data to core artifacts without changing core semantics. Extension rules apply only when the extension is declared by the corpus (see foundations/extensions.md).

yaml
Extensions:
  type: object
  additionalProperties: true
 
# Example usage in an artifact
extensions:
  example_ext:
    some_field: "value"

Severity

Severity level for findings.

ValueCVSS RangeDescription
CRITICAL9.0 - 10.0Immediate exploitation risk
HIGH7.0 - 8.9Significant security impact
MEDIUM4.0 - 6.9Moderate security impact
LOW0.1 - 3.9Minor security impact
INFO0.0Informational only
yaml
# Schema definition
Severity:
  type: string
  enum: [CRITICAL, HIGH, MEDIUM, LOW, INFO]

FindingCategory

Category classification for findings.

ValueDescription
AUTHZAuthorization and access control
AUTHNAuthentication
CRYPTOCryptographic issues
CONFIGConfiguration vulnerabilities
INJECTInjection vulnerabilities
LEAKInformation disclosure
LOGICBusiness logic flaws
RACERace conditions
SSRFServer-side request forgery
IDORInsecure direct object reference
yaml
# Schema definition
FindingCategory:
  type: string
  enum: [AUTHZ, AUTHN, CRYPTO, CONFIG, INJECT, LEAK, LOGIC, RACE, SSRF, IDOR]

ConceptType

Type classification for concepts.

ValueDescription
IDENTITYPrincipal or identity entity
RESOURCEProtected resource
POLICYPolicy or permission document
CREDENTIALAuthentication credential
TOKENSession or access token
KEYCryptographic key
CONFIGURATIONSystem configuration
yaml
# Schema definition
ConceptType:
  type: string
  enum: [IDENTITY, RESOURCE, POLICY, CREDENTIAL, TOKEN, KEY, CONFIGURATION]

ActionType

Type classification for actions.

ValueDescription
CREATECreate new resource
READRead resource data
UPDATEModify existing resource
DELETERemove resource
ACCESSGeneric access
EXECUTEExecute code or command
ASSUMEAssume identity
GRANTGrant permission
REVOKERevoke permission
yaml
# Schema definition
ActionType:
  type: string
  enum: [CREATE, READ, UPDATE, DELETE, ACCESS, EXECUTE, ASSUME, GRANT, REVOKE]

Composite Types

InvariantRef

Reference to an invariant with state tracking.

FieldTypeRequiredDescription
idInvariantIDYesInvariant identifier
stateInvariantStateNoCurrent state
notesstringNoAdditional context
yaml
# Schema definition
InvariantRef:
  type: object
  required: [id]
  properties:
    id:
      $ref: "#/$defs/InvariantID"
    state:
      $ref: "#/$defs/InvariantState"
    notes:
      type: string

Example:

yaml
invariant:
  id: INV-AWS-NO-PUBLIC-S3
  state: VIOLATED
  notes: "Public bucket found in staging environment"

EntryPoint

Defines an entry point for scenario or exploration.

FieldTypeRequiredDescription
interactionInteractionIDYesStarting interaction
parametersParameter[]NoInput parameters
preconditionsstring[]NoRequired preconditions
yaml
# Schema definition
EntryPoint:
  type: object
  required: [interaction]
  properties:
    interaction:
      $ref: "#/$defs/InteractionID"
    parameters:
      type: array
      items:
        $ref: "#/$defs/Parameter"
    preconditions:
      type: array
      items:
        type: string

Example:

yaml
entry_point:
  interaction: I-AWS-ASSUME-ROLE-001
  parameters:
    - name: role_arn
      type: string
      required: true
    - name: session_name
      type: string
      required: false
  preconditions:
    - "Caller has sts:AssumeRole permission"
    - "Target role trust policy allows assumption"
 
### TangibleLocation
 
Records **where a surface is concretely accessible/observable** for testers and auditors (e.g., a full web URL).
 
This field type is intentionally declarative and MUST NOT encode security logic. Use invariants (`INV-*`) for logic.
 
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `kind` | string | Yes | Locator kind (`web_url`, `api_url`, `graphql`, `cli`, `email`, `file`, `event`) |
| `web_url_template` | string | No | Templated fully-qualified URL (use placeholders like `{host}`) |
| `example_urls` | string[] | No | Concrete URLs a tester can paste into a browser/curl |
| `notes` | string | No | Scoping notes (auth preconditions, flags, instance settings) |
 
```yaml
# Schema definition
TangibleLocation:
  type: object
  required: [kind]
  properties:
    kind:
      type: string
      enum: [web_url, api_url, graphql, cli, email, file, event]
    web_url_template:
      type: string
    example_urls:
      type: array
      items:
        type: string
    notes:
      type: string

Example:

yaml
tangible_locations:
  - kind: web_url
    web_url_template: "https://{host}/{namespace}/{project}/-/tags.rss"
    example_urls:
      - "https://gitlab.example.com/gitlab-org/gitlab/-/tags.rss"
    notes: "RSS feed for tags; unauthenticated for public projects"
code

### Parameter

Defines a typed parameter for interactions or generators.

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Parameter name |
| `type` | string | Yes | Data type |
| `required` | boolean | No | Is required (default: true) |
| `default` | any | No | Default value |
| `description` | string | No | Parameter description |
| `constraints` | Constraint[] | No | Validation constraints |

```yaml
# Schema definition
Parameter:
  type: object
  required: [name, type]
  properties:
    name:
      type: string
      pattern: "^[a-z][a-z0-9_]*$"
    type:
      type: string
      enum: [string, integer, boolean, array, object]
    required:
      type: boolean
      default: true
    default:
      # Any type allowed
    description:
      type: string
    constraints:
      type: array
      items:
        $ref: "#/$defs/Constraint"

Example:

yaml
parameters:
  - name: role_arn
    type: string
    required: true
    description: "ARN of the role to assume"
    constraints:
      - type: pattern
        value: "^arn:aws:iam::[0-9]{12}:role/.+$"
  - name: duration_seconds
    type: integer
    required: false
    default: 3600
    constraints:
      - type: range
        min: 900
        max: 43200

Constraint

Validation constraint for parameters.

FieldTypeRequiredDescription
typestringYesConstraint type
valueanyConditionalConstraint value
minnumberConditionalMinimum value
maxnumberConditionalMaximum value
messagestringNoCustom error message
yaml
# Schema definition
Constraint:
  type: object
  required: [type]
  properties:
    type:
      type: string
      enum: [pattern, range, enum, length, custom]
    value:
      # Any type - depends on constraint type
    min:
      type: number
    max:
      type: number
    message:
      type: string

FlowStep

Defines a step within a flow.

FieldTypeRequiredDescription
orderintegerYesStep sequence number
interactionInteractionIDYesInteraction executed
descriptionstringNoStep description
conditionalstringNoCondition for execution
on_successintegerNoNext step on success
on_failureintegerNoNext step on failure
yaml
# Schema definition
FlowStep:
  type: object
  required: [order, interaction]
  properties:
    order:
      type: integer
      minimum: 1
    interaction:
      $ref: "#/$defs/InteractionID"
    description:
      type: string
    conditional:
      type: string
    on_success:
      type: integer
    on_failure:
      type: integer

Example:

yaml
steps:
  - order: 1
    interaction: I-AWS-GET-CALLER-IDENTITY-001
    description: "Verify current identity"
  - order: 2
    interaction: I-AWS-ASSUME-ROLE-001
    description: "Assume target role"
    on_success: 3
    on_failure: 4
  - order: 3
    interaction: I-AWS-GET-CREDENTIALS-001
    description: "Retrieve session credentials"
  - order: 4
    interaction: I-AWS-LOG-FAILURE-001
    description: "Log assumption failure"

Finding

Complete finding document structure.

FieldTypeRequiredDescription
idFindingIDYesFinding identifier
titlestringYesBrief title
severitySeverityYesSeverity level
categoryFindingCategoryYesFinding category
explorationExplorationIDYesSource exploration
invariantInvariantIDNoViolated invariant
descriptionstringYesDetailed description
impactstringYesSecurity impact
remediationstringYesRecommended fix
evidenceEvidence[]NoSupporting evidence
yaml
# Schema definition
Finding:
  type: object
  required: [id, title, severity, category, exploration, description, impact, remediation]
  properties:
    id:
      $ref: "#/$defs/FindingID"
    title:
      type: string
      maxLength: 100
    severity:
      $ref: "#/$defs/Severity"
    category:
      $ref: "#/$defs/FindingCategory"
    exploration:
      $ref: "#/$defs/ExplorationID"
    invariant:
      $ref: "#/$defs/InvariantID"
    description:
      type: string
    impact:
      type: string
    remediation:
      type: string
    evidence:
      type: array
      items:
        $ref: "#/$defs/Evidence"

Evidence

Supporting evidence for a finding.

FieldTypeRequiredDescription
typestringYesEvidence type
descriptionstringYesEvidence description
datastringNoEvidence content
urlstringNoReference URL
yaml
# Schema definition
Evidence:
  type: object
  required: [type, description]
  properties:
    type:
      type: string
      enum: [log, screenshot, request, response, code, configuration]
    description:
      type: string
    data:
      type: string
    url:
      type: string
      format: uri

Reference Collections

ConceptList

List of concept references.

yaml
# Schema definition
ConceptList:
  type: array
  items:
    $ref: "#/$defs/ConceptID"
  uniqueItems: true

Example:

yaml
concepts:
  - C-AWS-IAM-ROLE
  - C-AWS-TRUST-POLICY
  - C-AWS-SESSION-TOKEN

InteractionList

List of interaction references.

yaml
# Schema definition
InteractionList:
  type: array
  items:
    $ref: "#/$defs/InteractionID"
  uniqueItems: true

Example:

yaml
interactions:
  - I-AWS-ASSUME-ROLE-001
  - I-AWS-GET-CREDENTIALS-002
  - I-AWS-VALIDATE-TOKEN-003

InvariantList

List of invariant references (simple or with state).

yaml
# Schema definition
InvariantList:
  type: array
  items:
    oneOf:
      - $ref: "#/$defs/InvariantID"
      - $ref: "#/$defs/InvariantRef"
  uniqueItems: true

Example (simple):

yaml
invariants:
  - INV-AWS-NO-PUBLIC-S3
  - INV-AWS-ADMIN-MFA

Example (with state):

yaml
invariants:
  - id: INV-AWS-NO-PUBLIC-S3
    state: HOLDS
  - id: INV-AWS-ADMIN-MFA
    state: VIOLATED
    notes: "Service account lacks MFA"

FindingList

List of finding references.

yaml
# Schema definition
FindingList:
  type: array
  items:
    $ref: "#/$defs/FindingID"
  uniqueItems: true

Example:

yaml
findings:
  - FD-AWS-AUTHZ-001
  - FD-AWS-CONFIG-002

FlowStepList

Ordered list of flow steps.

yaml
# Schema definition
FlowStepList:
  type: array
  items:
    $ref: "#/$defs/FlowStep"
  minItems: 1

Type Summary Table

Identifier Types

TypePatternExample
ConceptID^C-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$C-AWS-IAM-ROLE
InteractionID^I-[A-Z0-9]{2,8}-[A-Z]{1,16}-[A-Z]{1,16}-[0-9]{3}$I-AWS-ASSUME-ROLE-001
FlowID^F-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$F-AWS-CROSS-ACCOUNT-ACCESS
ScenarioID^S-[A-Z0-9]{2,8}-[A-Z0-9-]{1,24}-[0-9]{3}$S-AWS-PRIVILEGE-ESCALATION-001
ExplorationID^E-[A-Z0-9]{2,8}-[A-Z0-9-]{1,24}-[0-9]{3}-[0-9]{2}$E-AWS-PRIVILEGE-ESCALATION-001-01
TraceID^T-[A-Z0-9]{2,8}-[A-Z0-9-]{1,24}-[0-9]{3}-[0-9]{2}-[0-9]{2}$T-AWS-PRIVILEGE-ESCALATION-001-01-02
FindingID^FD-[A-Z0-9]{2,8}-[A-Z]{1,16}-[0-9]{3}$FD-AWS-AUTHZ-001
PredicateID^P-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$P-AWS-HAS-MFA
InvariantID^INV-[A-Z0-9]{2,8}-[A-Z0-9-]{1,32}$INV-AWS-NO-PUBLIC-S3
GeneratorID^GEN-[A-Z0-9-]{1,24}-[0-9]{3}$GEN-BOUNDARY-001
PatchID^PATCH-[A-Z0-9]{2,8}-[0-9]{3}$PATCH-AWS-001

Enumeration Types

TypeValues
CriticalityP0, P1, P2, P3
VerdictPASS, FAIL, INCONCLUSIVE, BLOCKED, SKIPPED
InvariantStateHOLDS, VIOLATED, UNKNOWN, NOT_APPLICABLE
ArtifactStatusDRAFT, REVIEW, ACTIVE, DEPRECATED, ARCHIVED
SeverityCRITICAL, HIGH, MEDIUM, LOW, INFO
FindingCategoryAUTHZ, AUTHN, CRYPTO, CONFIG, INJECT, LEAK, LOGIC, RACE, SSRF, IDOR
ConceptTypeIDENTITY, RESOURCE, POLICY, CREDENTIAL, TOKEN, KEY, CONFIGURATION
ActionTypeCREATE, READ, UPDATE, DELETE, ACCESS, EXECUTE, ASSUME, GRANT, REVOKE

Composite Types

TypeRequired Fields
InvariantRefid
EntryPointinteraction
Parametername, type
Constrainttype
FlowSteporder, interaction
Findingid, title, severity, category, exploration, description, impact, remediation
Evidencetype, description

  • [[01-id-syntax]] - Detailed ID pattern documentation
  • [[02-reference-syntax]] - How to reference artifacts
  • [[03-formal-logic]] - Logical expression types
  • [[schemas/grammar.schema.yaml]] - JSON Schema implementation