Skip to content

[Bug][security][skills] Protect URL skill sources with secure transport and integrity verification #1003

Description

@wenjin272

Description

Skills.from_url(...) / Skills.fromUrl(...) currently accepts both http:// and https:// skill archives in Python and Java. The archive is downloaded and extracted without checking an operator-supplied digest or other integrity expectation.

Remote skill content is privileged: its SKILL.md becomes instructions consumed by the agent, and its bundled resources may be used by the built-in tools. A URL skill source should therefore be treated with the same care as executable code rather than ordinary configuration data.

Flink Agents is currently in the experimental 0.x release series and does not provide production-readiness guarantees. This issue tracks the hardening needed before production readiness / 1.0.

Expected behavior

  • Reject plain HTTP URL skill sources by default. If an unsafe compatibility opt-in is retained, it should be explicit and clearly documented.
  • Allow an operator to pin an expected content digest, initially SHA-256, and verify it before extraction.
  • Fail closed with a clear error when transport or integrity requirements are not met.
  • Keep the source configuration and behavior aligned across Java and Python, including plan serialization where applicable.
  • Document that remote skill content is trusted instructions/code and explain how skill directories interact with the built-in tools.
  • Add focused Java and Python tests for HTTP rejection or opt-in behavior, matching and mismatching digests, and unchanged safe extraction behavior.

How to reproduce

  1. Serve a valid skill archive over plain HTTP.
  2. Configure it through Skills.from_url(...) or Skills.fromUrl(...).
  3. Observe that the archive is accepted and materialized.
  4. Change the archive at the same URL and load it again.
  5. Observe that the changed content is accepted without any integrity signal or operator-provided expectation.

Version and environment

Confirmed in Apache Flink Agents 0.3.1 and on main as of 2026-08-12, in both the Java and Python implementations.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug[Issue Type] Something isn't working as expected.priority/majorDefault priority of the PR or issue.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions