Upgrade checklist
-
Schedule downtime and back up both the database and Mythic-managed files.
-
Record scripts, bots, eventing workflows, and external integrations that use API tokens,
/api/v1.4routes, Hasura actions, or task/callback IDs. -
Update every payload type, C2 profile, translation container, and consuming container to a v4-compatible container library. The v4 development branches use:
- Go:
github.com/MythicMeta/MythicContainer@v1.7.0-rc4 - Python:
mythic-container==0.7.0-rc9 - Python scripting:
mythic==0.3.0-rc8
- Go:
For consistency sake, if you have a public service that you’re updating, make the updates to a branch called
Mythic-v4.0.0.
This will make it so users doing testing can always check out/install the same branch for this batch of updates.-
Update the Mythic checkout, rebuild
mythic-cli, and start Mythic. Database migrations run automatically. - Confirm the server and UI versions, then check Installed Services for incompatible or offline containers.
-
Recreate API tokens with the minimum required scopes and update each caller to use
Authorization: Bearer <token>. - Run a smoke test for login, GraphQL queries, payload builds, callback tasking, file upload/download, eventing, and every external integration.
Breaking changes
Authentication is Bearer-only
Protected HTTP and GraphQL requests no longer authenticate from themythic cookie. Access tokens and API tokens use the same header:
API tokens are opaque, scoped, and shown once
API tokens are no longer long-lived JWTs. New tokens begin withmtk_, are hashed at rest, and are shown only when created.
Save a new token immediately; Mythic cannot recover its value from the UI or database.
All v3.4 API tokens must be regenerated.
A token can receive only scopes already available to the caller.
Write scopes include the corresponding read scope.
Resource wildcards such as task.* and the global * scope are supported.
apiTokenScopeDefinitions, scopeCheck, and whoami to discover available scopes and inspect the current identity.
/api/v1.4 was removed
Mythic action and webhook routes are now mounted without the /api/v1.4 prefix. For example:
Hasura actions use camelCase
The remaining snake_case action names were normalized:
Regenerate GraphQL clients or update stored queries after changing these names.
Actions use operation-scoped display IDs
Public task and callback actions now use the IDs operators see in the UI. Migrate ambiguous arguments as follows:
For example, v4 task creation uses display IDs and can resolve task references explicitly:
id.
Container RPC carries authenticated context
Mythic now propagates an authenticated context through RabbitMQ and enforces scopes on container RPC requests and responses. All services must use compatible container libraries; hand-written RabbitMQ clients must preserve the auth-context header when forwarding work. If a container works on v3.4 but v4 reports missing context or scope errors, update its library before debugging the RPC itself.Eventing API-token inputs are objects
The v4mythic.apitoken schema is an object with a token type and explicit scopes list:
* access.
Migrate workflows to the object form so their required permissions are visible and constrained.
The token exists only for the event step and is invalidated when the step finishes.
Grant only the scopes the custom function needs.
Wrapper allowlists were replaced
The payload type fieldswrapped_payloads and supported_wrapper_payload_types were replaced by wrapper_payload_requirements.
Builders now return build_metadata (architecture and format; Mythic records the selected OS), and wrappers declare exact accepted combinations with optional build-parameter conditions.
This way wrappers and payloads can link up in a supported way without hardcoding payload type names.
The following wrapper example says that it:
- supports a payload’s format of
shellcode, architecture ofx64, and os ofwindowsWHEN this wrapper’s own build parameter ofarchisx64 - no other payload requirements, so it supports no other options
Python3 Example in wrapper payload definition
Payload build metadata
x64 and setting its format to exe, shellcode, or source.
The builder doesn’t need to specify the os because Mythic already knows it based on the parameters the user selected when building the payload.
Existing wrapper payload types must migrate their definitions.
Normal payload builders should return metadata so compatible payload discovery is accurate.
Legacy browser-script renderers were removed
The legacyscreenshot, download, and search browser-script result renderers were removed.
Return supported plaintext, table, or media structures and use current authenticated file/media URLs.
The obsolete operation-specific browser-script mapping table and legacy payload/C2/translation resync send paths were also removed.
Process Browser
The format for messages from the agent for the process browser changed. The idea is for a very small change to lift out three frequently repeated fields into more generic metadata.Mythic v3.4
Mythic v4.0
C2 Profile File Host Changes
Mythic 3.4 would send a single file at a time to be hosted by a C2 profile with just add/remove, the path, and a file_id. With Mythic 4.0, there are no more blanket allows for downloading files if you know the UUID. Mythic now sends a single message to the host file function for a C2 profile with all of the files. Each file has its own add/remove state, path, agent_file_id and a download token. That download token must be passed as anAuthorization: Bearer <token> value with the download request.
These tokens are scoped specifically to the associated agent_file_id value, so you can only ever download one file with it.
These tokens are also not permanently saved by Mythic, so a reboot will generate new tokens that the C2 profile must update internally.
New v4 capabilities
- Operation chat supports standard channels and AI-backed chat containers, streaming responses, cancellation, search, message edits, tool output, approvals, input requests, and delegated sub-agent views.
- Operator aliases provide command and generic aliases, optional payload type or chat-container scope, nesting, and import/export.
- Task references expand
@credand@linkvalues before tasking and record the resolution on the task. - Parameters add display names, display labels for choices, richer hide conditions, dynamic C2 choices, complex dynamic choices,
other_parameters, andJSONStringparameters with inline schemas. - Eventing steps can pause for approval or typed runtime input and resume with the operator’s response.
- File transfers can use byte offsets, report byte-level progress, and resume from the next missing chunk or offset.
- Instead of reporting
total_chunks,chunk_size, andchunk_num, agents can now optionally reporttotal_sizeandchunk_offsetfor variable chunks when download (agent -> mythic) files. - Agents can report back in the
downloadkey afile_idandresume: true- Mythic will tell the agent the transfer type that the file started with (chunk or offset) and the next chunk_num/chunk_offset that it’s expecting.
- Instead of reporting
- File editing adds an interactive, versioned UTF-8 text editor with conflict detection, staged previews, refresh, force-overwrite, and close actions.
- Credentials add subtype, structured identity and metadata, custom display values, updates, validity tracking, and dedicated JWT/Kerberos renderers.
- C2 file hosting is tracked and can be updated, retried, stopped, or removed.
- Agent RPC lets an agent make asynchronous command specific requests through its container.
- Custom RPC timeouts can be extended with
custom_rpc_timeoutwithout retrying duplicate work.
Rollback
Do not point v3.4 services at a database after v4 migrations have run. To roll back, stop Mythic, restore the v3.4 code, restore the pre-upgrade database and file backups, rebuildmythic-cli, and start the old version. Recreate any external configuration changes made after the backup separately.