kgretzky/evilginx2 · error

this phishlet is incompatible with current version of…

Error message

this phishlet is incompatible with current version of evilginx.
please do the following modifications to update it:

- in each `sub_filters` item change `hostname` to `triggers_on`
- in each `sub_filters` item change `sub` to `orig_sub`
- rename section `user_regex` to `username`
- rename section `pass_regex` to `password`
- rename field `re` in both `username` and `password` to `search`
- field `key` in both `username` and `password` must be a regexp by default
- move `username` and `password` into new `credentials` section
- add `type` field to `username` and `password` with value 'post' or 'json'
- change `min_ver` to at least `2.2.0`
you can find the phishlet 2.2.0 file format documentation here: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.2.0)

What it means

When loading a phishlet, parseVersion reads `min_ver` and the loader rejects phishlets whose declared minimum version is below 2.2.0. The long message is a migration checklist transforming a legacy (pre-2.2.0) phishlet into the 2.2.0 format. Evilginx changed the phishlet schema and requires authors to upgrade their files.

Solutions

  1. Update the phishlet to the 2.2.0 format following the checklist in the message (triggers_on, orig_sub, credentials section with username/password having type+search fields)
  2. Set `min_ver` to at least 2.2.0 in the phishlet YAML
  3. Download an updated version of the phishlet from the author's repository if available
  4. Use the official phishlet 2.2.0 format docs: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.2.0)

Example fix

# before (legacy)
min_ver: 2.1.0
user_regex:
  key: '(login)'
  re: '(.*)'
# after
min_ver: 2.3.0
credentials:
  username:
    type: 'post'
    key: 'login'
    search: '(.*)'
  password:
    type: 'post'
    key: 'password'
    search: '(.*)'
Defensive patterns

Strategy: validation

Validate before calling

// check min_ver before loading
if v, _ := parseVersion(yaml "min_ver"); !isVersionHigherEqual(v, "2.2.0") {
    return fmt.Errorf("phishlet %s must declare min_ver >= 2.2.0", name)
}

Type guard

func isPhishlet22Compatible(minVer string) bool {
    v, err := parseVersion(minVer)
    return err == nil && isVersionHigherEqual(&v, "2.2.0")
}

Try / catch

if err := cfg.LoadPhishlet(name, path, nil); err != nil {
    if strings.Contains(err.Error(), "incompatible with current version") {
        log.Error("upgrade the phishlet to 2.2.0 format before use: %v", err)
    }
}

Prevention

When it happens

Trigger: Calling LoadPhishlet / parsing a .yaml/.yml phishlet whose `min_ver` is absent or less than 2.2.0 (legacy 2.0/2.1 files with `user_regex`/`pass_regex` sections and `sub_filters` using `hostname`/`sub` keys).

Common situations: Downloading old phishlets from pre-2.2 era repos/collections, reusing a phishlet authored for evilginx 2.1, or a phishlet missing `min_ver` entirely so parseVersion yields a version below 2.2.0.

Related errors


AI-assisted analysis of kgretzky/evilginx2@4c0988a1d9 (2026-09-05). Data as JSON: /api/errors/1054b76c0e167a85. Report an issue: GitHub.

Appendix: source

Thrown at core/phishlet.go:293

	c.SetConfigType("yaml")
	c.SetConfigFile(path)

	err := c.ReadInConfig()
	if err != nil {
		return err
	}

	p.Name = site
	p.Path = path
	p.ParentName = ""
	p.Author = c.GetString("author")
	p.RedirectUrl = c.GetString("redirect_url")
	p.Version, err = p.parseVersion(c.GetString("min_ver"))
	if err != nil {
		return err
	}
	if !p.isVersionHigherEqual(&p.Version, "2.2.0") {
		return fmt.Errorf("this phishlet is incompatible with current version of evilginx.\nplease do the following modifications to update it:\n\n" +
			"- in each `sub_filters` item change `hostname` to `triggers_on`\n" +
			"- in each `sub_filters` item change `sub` to `orig_sub`\n" +
			"- rename section `user_regex` to `username`\n" +
			"- rename section `pass_regex` to `password`\n" +
			"- rename field `re` in both `username` and `password` to `search`\n" +
			"- field `key` in both `username` and `password` must be a regexp by default\n" +
			"- move `username` and `password` into new `credentials` section\n" +
			"- add `type` field to `username` and `password` with value 'post' or 'json'\n" +
			"- change `min_ver` to at least `2.2.0`\n" +
			"you can find the phishlet 2.2.0 file format documentation here: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.2.0)")
	}
	if !p.isVersionHigherEqual(&p.Version, "2.3.0") {
		return fmt.Errorf("this phishlet is incompatible with current version of evilginx.\nplease do the following modifications to update it:\n\n" +
			"- replace `landing_path` with `login` section\n" +
			"- change `min_ver` to at least `2.3.0`\n" +
			"you can find the phishlet 2.3.0 file format documentation here: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.3.0)")
	}

View on GitHub (pinned to 4c0988a1d9)