Skip to content

Addressing Ownership and Identity for packages at entry into FAIR #45

@ramseyp

Description

@ramseyp

This writing is attempting to address a security challenge in the FAIR protocol as it appears to be written: how to verify package authors' identities before allowing code into the federated distribution system. The core problem is preventing malicious actors from impersonating legitimate developers and distributing code (malicious or otherwise) under false identities. The best solution appears to be a two-phase approach combined with clear communication to the public about ownership. @toderash and I set out to tackle this and bring it to the group. Yes, it's long, but we've tried to lay out the ownership and identity issues in a design perspective, not technical, necessarily.

Short-term, the suggestion is to leverage WordPress.org's existing "manual" verification process by mirroring packages from dot-org and inheriting their established trust relationships. DIDs are added to serve as a second layer of verification.

Long-term, we envision both a centralized “FAIR Labeling Server" (below, under the “Centralized Authorship Verification Design” heading) that serves as the authoritative source for package identity verification and a manual registration process that feeds into this server. In both the short and long-term, no package enters the federated system without proper identity validation combined with a DID. In the perfect world, dot-org joins FAIR and can continue serving as the registration source for package authors - the question will remain for those who never publish on dot-org, but if the landscape changes for WordPress, this may be addressed outside of this writing.

The writing calls out some more granular situations and technical challenges, including handling packages from sources other than WordPress.org, managing transitions when authors migrate from dot-org to federated systems, and the limitations of domain-based verification methods. We’re attempting to boil this down for clarity while remaining verbose enough to cover the needs we’re seeing that need to be addressed.

What is the need?

Within the FAIR protocol, the vexing question is this: How does FAIR address verifying someone is who they say they are? The scenario is one where a person fakes the ownership of someone else’s code. There is a moderation process and framework being put into place, including a dispute resolution process, but this would come *after* a bad actor has been identified, not how to prevent a bad actor from coming into the system. With FAIR being a federated distributed system, the onus lies in preventing a fake identity from getting in and being distributed. The use of DIDs and associating them with something like a domain, implies trust that both the code and the domain are legit. Both a domain and code can be hijacked or compromised.

Therein lies the need. How is a plugin owner/theme owner “verified” today? Dot-org handles this in the submission process: Planning, Submitting, and Maintaining Plugins – Plugin Handbook | Developer.WordPress.org. This is a “human” process that doesn’t readily have a technical solution. As an author goes through the registration and verification process, “trust” is established. FAIR needs this piece of the equation. If FAIR wants hosts and others to participate and add a node to the network, FAIR is asking them to trust the package coming into those nodes and inherit the risk and responsibility to their customers. This “trust” carries immense risk without a defined way of establishing identity and ownership prior to packages hitting the federated distribution. Businesses and groups will not assume that risk nor should they be asked to.

Short term: Mirroring dot-org

For the near-term, with AspireCloud being the practical example, by using dot-org as the source for packages coming into AspireCloud, ownership & identity for FAIR can be inherited from dot-org. Dot-org has an established registration/validation/verification process (Planning, Submitting, and Maintaining Plugins – Plugin Handbook | Developer.WordPress.org) giving any code mirrored from there an “owner”. Once AspireCloud brings in the code, a DID can be associated with a package, giving two pieces of identity. An evolution of this process would involve instructions to package authors to add a DID to their code. FAIR can recognize this addition, combined with coming from dot-org as a “double method” way of establishing identity.

Moving from dot-org to FAIR, or laying out an outline

Initially, we are operating heavily on the Assumption or Dependency that: An author has a published package on dot-org. As such, dot-org serves as the initial “trust” source for ownership, meaning we trust someone is who they say they are if they have published code on dot-org. Under this assumption:

  • Packages from dot-org are mirrored.
    • Ownership is inherited from dot-org
    • A working DID is assigned
      • This is a point requiring clear communication - the working DID is intended to be temporary, until a package author is able to establish their own, at which time their DID becomes “canonical”. Ownership of an author’s package belongs to the author, not FAIR.
    • A label is added to the package establishing ownership verification: “author established” (Centralized Authorship Verification Design heading below)
    • The package is formatted to the FAIR spec, ready for distribution / federation

When a developer adds their own DID to a package that is hosted on dot-org, which we propose authors start doing:

  • Packages from dot-org are mirrored
    • AspireSync scans package from dot-org for introduction of DID, establishing identity of the author as connected to the new DID
    • No working DID is applied via AspireSync
  • If DID is found, AspireSync will:
    • Resolve the DID to verify the listing exists and the required meta is present in the declared repo
      • Currently the Bluesky PLC server is the only source for DID resolution
      • Must validate that the package with the new DID & source repo complies with the minimum FAIR protocol requirements
    • Update AC to index the plugin from its FAIR repo source
    • Update AC to de-list it from the dot-org mirror
    • Cancel the working DID using the tombstone process
      • Cancelling the working DID is better than transferring it to the package owner as an alias since it essentially undoes that interim DID (working DID), removing any implied ownership package authors may be worried about (and which clear communication on package ownership would address)
  • Result: continuity from dot-org to FAIR with same package maintainer(s)

When a developer has a package hosted on dot-org, but then published only to FAIR (an issue highlighted below:

  • A de-duplication process of ownership (and DIDs) is needed here to establish which one takes precedence. One would assume FAIR becomes the authoritative source. This is something to be worked out in a medium-term timeline. Note this is not the same as the technical issue of deduplication of packages, which has been resolved with a naming convention.

Two potential issues to consider:

  • Dot-org could strip DID info, requiring a new process
    • If dot-org for some reasons decides to strip DIDs from packages published there, this accelerates FAIR needing a registration process that feeds into a labeling process that adds an “author established” label to packages.
  • Package forks with same slug but different updates between dot-org & federated version (ACF to SCF) - rely on a deduplication process. If authors publish to both dot-org and then later publish only to FAIR, you have two sources of the same code. In a “transition scenario” such as this, some kind of de-duplication process is needed to prevent conflicts.

Thinking through newly-issued DIDs for Other-Than dot-org Sources

Risk Issues with Current Proposed Solution

Relying on verification of identity via a Txt record in DNS:

  • Does not establish identity to a person (whois can be redacted). How does FAIR catch that the domain I use is mine? It appears to solely look for the record’s existence.
  • Domain registration can be done with a throwaway email address & not renewed, leaving trust established falsely, but accepted by the verification process.

As such, without a registration / verification process, no process is clearly established for verifying someone is who they claim prior to their code being allowed in the system
Moderation - current proposed approach
Moderation PR: #14
In short, this appears to be an “after the fact” process - a way to report something after it’s in the system, as a package inherently can’t be labeled before it exists in the federated system.. It does not address the entry of a package into the system.

Considerations in New Proposed Approach

Must label as trusted in required FAIR service; see diagram in #35 - this requires a gate to establish trust.

  • From a trust-established repo
    • Discuss whether a package with a new DID can/should inherit trust from a vetted repo
      • It feels like this can be a deferred decision on how to handle it in a systematic way. Shorter-term, a case-by-case “manual” process should suffice.
  • From a new repo
    • Currently the verification & approval process will be manual
    • Alternative potential verification methods to be explored in the future might include:
      • DNS txt record IF the site also has an SSL/TLS certificate of the OV, IV, or EV type. (Organization Validation, Individual Validation, or Extended Validation, which tie the cert to a verified identity)
      • Third-party providers like Interac Verified
      • Other Public key certificate that includes identity verification as well as key pair validation
      • OAuth providers if they have verified identity (your bank has done so, Facebook and Github have not).
    • Submitted DIDs for packages will not be accepted for federation without identity verification to establish ownership or v of the package material.

Centralized Authorship Verification design

This issue moves in the right direction and shows a system that handles the authorship labeling for packages. This is additional to the DID and that’s needed as anyone getting a DID appears to be able to do so with no “prove you are who you say you are” process.

#35
The FAIR Moderation (Labeling) Server from the original diagram is necessary to keep the moderation system intact by providing trust signals. I'm proposing that FAIR operate one that is required for Aggregators and only provides the necessary trust signals.

Image

In this diagram, the yellow node surrounded by a red box, labeled “Required: FAIR Labeling (Moderation) Server is a single, centralized authority for verifying identity & ownership of a package. It contains the source of truth for package identity in some kind of centralized list. No package is federated / distributed without being checked against this system.

Short(er) term, packages mirrored from dot-org carry the trust established by being published on dot-org, creating the initial list on the FAIR Labeling Server, and the package meta contains an “authorized/validated/verified” kind of label. This label only comes from this server.

Issue - the protocol as currently written looks to the Bluesky PLC server for the identities of packages. This doesn’t carry the trust needed. A package registered there (Bluesky server) has no identity verification against a source of truth, the dot-org packages, in the case above. How are we connecting/reconciling these two?

The Bluesky DID server may not be the right answer - we may need the “FAIR Labeling Server” to serve that role for a sense of trust and security or at least provide the “authority” label which is combined with the DID. No package is distributed without both.

What about packages not on dot-org

How does Crowd Favorite / PMPro / Gravity Forms / or other plugin authors not on dot-org prove identity? Anyone can register a DID, but the “authorized” identity label is missing. This scenario requires some kind of manual review process for these authors.

Questions to be addressed & some points carried over from the 31 July 2025 TSC call:

  1. When an author removes a plugin from dot-org, how to clearly communicate ownership and identity with the author? Noted - clarity around ownership must be written up for the community
  2. Author adds their own DID to package, does Aspire Cloud’s DID supersede it or will the author’s DID take precedence? How would it take precedence? The direction is that the Author’s DID takes precedence. The Aspire Cloud DID is internal/temporary and does not presume ownership.
  3. It’s important that items like imported WordPress plugins are officially documented and that process isn't just in code, and along with this, additional policy docs are in place (not just github issues). As a start:
    1. Ownership of packages
    2. How self-hosted repos are approved as sources for packages published to FAIR
    3. Mirroring of dot-org packages
    4. De-duplicating packages when an author begins publishing to FAIR and they have code already on dot-org
    5. Glossary of terms: Moderation, Labeling, DID, Ownership, Package, etc.
    6. Our DID registration does not imply or assert ownership, it’s just transitional

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions