{
  "component-definition": {
    "uuid": "275893ca-8c3d-5394-9a1d-c357351ddf1a",
    "metadata": {
      "title": "ISM-2078 Password strength: implementations in the OSCAL Ops Library",
      "last-modified": "2026-09-16T02:00:55Z",
      "version": "0.1.0",
      "oscal-version": "1.1.2",
      "props": [
        {
          "name": "library-view",
          "ns": "https://oscalops.net/ns/library",
          "value": "control-implementations"
        },
        {
          "name": "catalog-release",
          "ns": "https://oscalops.net/ns/library",
          "value": "6f037e85-d69c-5606-874e-1d986ef561a9"
        },
        {
          "name": "control-id",
          "ns": "https://oscalops.net/ns/library",
          "value": "ism-2078"
        }
      ],
      "links": [
        {
          "href": "https://library.oscalops.net/catalogs/acsc-ism/v2026.09.4/controls/ism-2078.json",
          "rel": "canonical"
        }
      ],
      "roles": [
        {
          "id": "system-administrator",
          "title": "System Administrator"
        },
        {
          "id": "system-security-officer",
          "title": "System Security Officer"
        }
      ],
      "parties": [
        {
          "uuid": "1b4346aa-044e-4e42-a524-53d40f60f879",
          "type": "organization",
          "name": "Platform Operations"
        }
      ],
      "remarks": "A derived view: the implemented requirements for ISM-2078 in Information Security Manual v2026.09.4, copied from the newest version of each component definition that addresses it. Each component's source-document property names that version in back matter. Edit the source component definitions, not this view."
    },
    "components": [
      {
        "uuid": "0a283933-bb57-4cb8-b6c4-064280d959cd",
        "type": "software",
        "title": "Debian 13 ISM Dictionary Checking",
        "description": "ism-2078 requires that commonly used or compromised passwords are not used. dictcheck evaluates every candidate against the cracklib dictionary from cracklib-runtime, and badwords adds organisation-specific terms.\n\nPartially implemented, and measured rather than assumed: the stock cracklib dictionary is a common-word corpus, not a breach-credential corpus. Depends on debian-13-pwquality-base.",
        "purpose": "Reject commonly used passwords and organisation-specific terms on local Debian accounts.",
        "props": [
          {
            "name": "os-distribution",
            "ns": "https://ns.oscalops.net/component-definitions",
            "value": "debian"
          },
          {
            "name": "os-release",
            "ns": "https://ns.oscalops.net/component-definitions",
            "value": "13"
          },
          {
            "name": "os-codename",
            "ns": "https://ns.oscalops.net/component-definitions",
            "value": "trixie"
          },
          {
            "name": "setting",
            "ns": "https://ns.oscalops.net/component-definitions",
            "value": "pwquality:dictcheck"
          },
          {
            "name": "setting",
            "ns": "https://ns.oscalops.net/component-definitions",
            "value": "pwquality:badwords"
          },
          {
            "name": "source-document",
            "ns": "https://oscalops.net/ns/library",
            "value": "9f9b89f2-ee5f-5ef6-b260-d3d5e2cb3177"
          }
        ],
        "links": [
          {
            "href": "#c6aaa027-2fa1-4d12-a806-c29641030292",
            "rel": "depends-on",
            "text": "pam_pwquality must be installed and enforcing"
          }
        ],
        "responsible-roles": [
          {
            "role-id": "system-administrator",
            "party-uuids": [
              "1b4346aa-044e-4e42-a524-53d40f60f879"
            ]
          }
        ],
        "control-implementations": [
          {
            "uuid": "8fda2aa1-ff06-4440-a73f-cc2ee3a321d9",
            "source": "https://raw.githubusercontent.com/AustralianCyberSecurityCentre/ism-oscal/v2026.09.4/ISM_catalog.json",
            "description": "The ISM prohibition on commonly used and compromised passwords, as published in the ACSC ISM OSCAL catalogue release v2026.09.4.",
            "props": [
              {
                "name": "catalog-release",
                "ns": "https://ns.oscalops.net/component-definitions",
                "value": "v2026.09.4"
              },
              {
                "name": "catalog-authority",
                "ns": "https://ns.oscalops.net/component-definitions",
                "value": "Australian Cyber Security Centre"
              },
              {
                "name": "control-family",
                "ns": "https://ns.oscalops.net/component-definitions",
                "value": "Guidelines for system access > Credential management > Password strength"
              }
            ],
            "links": [
              {
                "href": "#36c41fd6-4e7c-4dbf-92bc-604bf58f40f1",
                "rel": "reference",
                "text": "Pinned ISM catalogue release"
              }
            ],
            "implemented-requirements": [
              {
                "uuid": "0af07420-e3c0-44a9-a0df-df1b3b3ce878",
                "control-id": "ism-2078",
                "description": "Partially implemented. dictcheck = 1 evaluates every candidate against the cracklib dictionary, and badwords rejects organisation-specific terms.\n\nMeasured on a clean Debian 13 install, with candidates padded to at or above the minimum length in force so that length cannot be the reason for rejection: 1 of 8 common breach-list passwords was rejected at a 15-character minimum, and 2 of 8 at 20. The stock cracklib dictionary is a common-word corpus, not a breach-credential corpus, so the substantive requirement is not met by this configuration alone.",
                "props": [
                  {
                    "name": "implementation-status",
                    "ns": "https://ns.oscalops.net/component-definitions",
                    "value": "partial"
                  },
                  {
                    "name": "applicability",
                    "ns": "https://cyber.gov.au/ns/ism/oscal/3.0",
                    "value": "NC"
                  },
                  {
                    "name": "applicability",
                    "ns": "https://cyber.gov.au/ns/ism/oscal/3.0",
                    "value": "OS"
                  },
                  {
                    "name": "applicability",
                    "ns": "https://cyber.gov.au/ns/ism/oscal/3.0",
                    "value": "P"
                  },
                  {
                    "name": "applicability",
                    "ns": "https://cyber.gov.au/ns/ism/oscal/3.0",
                    "value": "S"
                  },
                  {
                    "name": "applicability",
                    "ns": "https://cyber.gov.au/ns/ism/oscal/3.0",
                    "value": "TS"
                  },
                  {
                    "name": "correlates-nist-statement",
                    "ns": "https://ns.oscalops.net/component-definitions",
                    "value": "ia-5.1_smt.a ia-5.1_smt.b"
                  },
                  {
                    "name": "correlation-strength",
                    "ns": "https://ns.oscalops.net/component-definitions",
                    "value": "equivalent"
                  },
                  {
                    "name": "assessment-method",
                    "ns": "https://ns.oscalops.net/component-definitions",
                    "value": "test"
                  },
                  {
                    "name": "assessment-frequency",
                    "ns": "https://ns.oscalops.net/component-definitions",
                    "value": "monthly"
                  },
                  {
                    "name": "residual-risk",
                    "ns": "https://ns.oscalops.net/component-definitions",
                    "value": "Measured: only 1 of 8 long common passwords rejected at minlen 15. cracklib is not a breach-credential corpus."
                  }
                ],
                "links": [
                  {
                    "href": "#2b95af72-5a88-45b0-9ceb-101cf845c227",
                    "rel": "reference",
                    "text": "Dictionary drop-in"
                  },
                  {
                    "href": "#71ac359d-3b86-4752-af35-7cad91128b5c",
                    "rel": "reference",
                    "text": "Verification script"
                  }
                ],
                "responsible-roles": [
                  {
                    "role-id": "system-administrator",
                    "party-uuids": [
                      "1b4346aa-044e-4e42-a524-53d40f60f879"
                    ]
                  }
                ],
                "remarks": "Close the residual by rebuilding the cracklib dictionary from a breach corpus with create-cracklib-dict(8) and pointing dictpath at the result, then re-running the verification script. The refresh cadence is the value bound to ia-05.01_odp.01."
              }
            ]
          }
        ]
      }
    ],
    "back-matter": {
      "resources": [
        {
          "uuid": "6f037e85-d69c-5606-874e-1d986ef561a9",
          "title": "Information Security Manual",
          "props": [
            {
              "name": "version",
              "value": "v2026.09.4"
            },
            {
              "name": "library-item",
              "ns": "https://oscalops.net/ns/library",
              "value": "catalog-release"
            },
            {
              "name": "catalog-key",
              "ns": "https://oscalops.net/ns/library",
              "value": "acsc-ism"
            },
            {
              "name": "authority",
              "ns": "https://oscalops.net/ns/library",
              "value": "Australian Cyber Security Centre"
            },
            {
              "name": "licence",
              "ns": "https://oscalops.net/ns/library",
              "value": "CC-BY-4.0"
            },
            {
              "name": "controls",
              "ns": "https://oscalops.net/ns/library",
              "value": "1192"
            }
          ],
          "citation": {
            "text": "ISM OSCAL content from the Australian Signals Directorate's Australian Cyber Security Centre, provided under a Creative Commons Attribution 4.0 International licence, excluding the Coat of Arms and the ASD logo."
          },
          "rlinks": [
            {
              "href": "../ISM_catalog.json",
              "media-type": "application/oscal+json",
              "hashes": [
                {
                  "algorithm": "sha-256",
                  "value": "237ea09362b8449ed5c5ee85de4725a0468ee73d13af7cf61c26d4e6ac47f12d"
                }
              ]
            },
            {
              "href": "https://raw.githubusercontent.com/AustralianCyberSecurityCentre/ism-oscal/v2026.09.4/ISM_catalog.json",
              "media-type": "application/oscal+json",
              "hashes": [
                {
                  "algorithm": "sha-256",
                  "value": "237ea09362b8449ed5c5ee85de4725a0468ee73d13af7cf61c26d4e6ac47f12d"
                }
              ]
            }
          ]
        },
        {
          "uuid": "9f9b89f2-ee5f-5ef6-b260-d3d5e2cb3177",
          "title": "Debian 13 ISM Dictionary Checking Component Definition",
          "description": "ism-2078 requires that commonly used or compromised passwords are not used. dictcheck evaluates every candidate against the cracklib dictionary from…",
          "props": [
            {
              "name": "version",
              "value": "1.0.0"
            },
            {
              "name": "library-item",
              "ns": "https://oscalops.net/ns/library",
              "value": "component-definition-version"
            },
            {
              "name": "artifact-slug",
              "ns": "https://oscalops.net/ns/library",
              "value": "debian-13-pwquality-dictionary"
            },
            {
              "name": "publication-status",
              "ns": "https://oscalops.net/ns/library",
              "value": "unpublished"
            },
            {
              "name": "assurance-state",
              "ns": "https://oscalops.net/ns/library",
              "value": "technically-tested"
            },
            {
              "name": "source-kind",
              "ns": "https://oscalops.net/ns/library",
              "value": "local"
            }
          ],
          "rlinks": [
            {
              "href": "../../../../component-definitions/debian-13-pwquality-dictionary/1.0.0/component-definition.json",
              "media-type": "application/oscal+json",
              "hashes": [
                {
                  "algorithm": "sha-256",
                  "value": "7ed515bac345db836f2694bf636f164abbfcafca96f29d9f4a126188d6d12e1f"
                }
              ]
            },
            {
              "href": "../../../../component-definitions/debian-13-pwquality-dictionary/1.0.0/index.html",
              "media-type": "text/html"
            }
          ]
        },
        {
          "uuid": "2b95af72-5a88-45b0-9ceb-101cf845c227",
          "title": "Dictionary checking",
          "description": "dictcheck = 1 and the organisation word list, asserting ism-2078. Deploys to /etc/security/pwquality.conf.d/50-ism-dictionary.conf.",
          "props": [
            {
              "name": "artifact-type",
              "ns": "https://ns.oscalops.net/component-definitions",
              "value": "pwquality-config"
            }
          ],
          "rlinks": [
            {
              "href": "../../../../component-definitions/debian-13-pwquality-dictionary/1.0.0/config/pwquality.conf.d/50-ism-dictionary.conf",
              "media-type": "text/plain"
            }
          ]
        },
        {
          "uuid": "71ac359d-3b86-4752-af35-7cad91128b5c",
          "title": "Verification script",
          "description": "Asserts the control from behaviour, with every candidate padded to the minimum length in force, and reports separately if another configuration sets a setting this component owns.",
          "props": [
            {
              "name": "artifact-type",
              "ns": "https://ns.oscalops.net/component-definitions",
              "value": "shell-script"
            }
          ],
          "rlinks": [
            {
              "href": "../../../../component-definitions/debian-13-pwquality-dictionary/1.0.0/scripts/verify-dictionary.sh",
              "media-type": "text/plain"
            }
          ]
        },
        {
          "uuid": "36c41fd6-4e7c-4dbf-92bc-604bf58f40f1",
          "title": "ACSC ISM OSCAL catalogue v2026.09.4",
          "description": "Australian Cyber Security Centre Information Security Manual OSCAL catalogue, release v2026.09.4: the release this document's control identifiers resolve against.",
          "props": [
            {
              "name": "release-tag",
              "ns": "https://ns.oscalops.net/component-definitions",
              "value": "v2026.09.4"
            },
            {
              "name": "sha256",
              "ns": "https://ns.oscalops.net/component-definitions",
              "value": "237ea09362b8449ed5c5ee85de4725a0468ee73d13af7cf61c26d4e6ac47f12d"
            }
          ],
          "rlinks": [
            {
              "href": "https://raw.githubusercontent.com/AustralianCyberSecurityCentre/ism-oscal/v2026.09.4/ISM_catalog.json",
              "media-type": "application/json"
            }
          ]
        },
        {
          "uuid": "c6aaa027-2fa1-4d12-a806-c29641030292",
          "title": "debian-13-pwquality-base component-definition",
          "description": "The component this one depends on: pam_pwquality must be installed and enforcing, or nothing here is applied.",
          "document-ids": [
            {
              "scheme": "https://ns.oscalops.net/component-definitions",
              "identifier": "debian-13-pwquality-base"
            }
          ],
          "rlinks": [
            {
              "href": "https://library.oscalops.net/component-definitions/debian-13-pwquality-base/1.0.0/component-definition.json",
              "media-type": "application/json"
            }
          ]
        }
      ]
    }
  }
}
