{"record":{"id":"1054b76c0e167a85","repo":"kgretzky/evilginx2","slug":"this-phishlet-is-incompatible-with-current-version","errorCode":null,"errorMessage":"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`\nyou can find the phishlet 2.2.0 file format documentation here: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.2.0)","messagePattern":"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`\nyou can find the phishlet 2\\.2\\.0 file format documentation here: https://github\\.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-\\(2\\.2\\.0\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/phishlet.go","lineNumber":293,"sourceCode":"\tc.SetConfigType(\"yaml\")\n\tc.SetConfigFile(path)\n\n\terr := c.ReadInConfig()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tp.Name = site\n\tp.Path = path\n\tp.ParentName = \"\"\n\tp.Author = c.GetString(\"author\")\n\tp.RedirectUrl = c.GetString(\"redirect_url\")\n\tp.Version, err = p.parseVersion(c.GetString(\"min_ver\"))\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !p.isVersionHigherEqual(&p.Version, \"2.2.0\") {\n\t\treturn fmt.Errorf(\"this phishlet is incompatible with current version of evilginx.\\nplease do the following modifications to update it:\\n\\n\" +\n\t\t\t\"- in each `sub_filters` item change `hostname` to `triggers_on`\\n\" +\n\t\t\t\"- in each `sub_filters` item change `sub` to `orig_sub`\\n\" +\n\t\t\t\"- rename section `user_regex` to `username`\\n\" +\n\t\t\t\"- rename section `pass_regex` to `password`\\n\" +\n\t\t\t\"- rename field `re` in both `username` and `password` to `search`\\n\" +\n\t\t\t\"- field `key` in both `username` and `password` must be a regexp by default\\n\" +\n\t\t\t\"- move `username` and `password` into new `credentials` section\\n\" +\n\t\t\t\"- add `type` field to `username` and `password` with value 'post' or 'json'\\n\" +\n\t\t\t\"- change `min_ver` to at least `2.2.0`\\n\" +\n\t\t\t\"you can find the phishlet 2.2.0 file format documentation here: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.2.0)\")\n\t}\n\tif !p.isVersionHigherEqual(&p.Version, \"2.3.0\") {\n\t\treturn fmt.Errorf(\"this phishlet is incompatible with current version of evilginx.\\nplease do the following modifications to update it:\\n\\n\" +\n\t\t\t\"- replace `landing_path` with `login` section\\n\" +\n\t\t\t\"- change `min_ver` to at least `2.3.0`\\n\" +\n\t\t\t\"you can find the phishlet 2.3.0 file format documentation here: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.3.0)\")\n\t}\n","sourceCodeStart":275,"sourceCodeEnd":311,"githubUrl":"https://github.com/kgretzky/evilginx2/blob/4c0988a1d9db4d172a185e979a38bfd0efdb5830/core/phishlet.go#L275-L311","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","solutions":["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)","Set `min_ver` to at least 2.2.0 in the phishlet YAML","Download an updated version of the phishlet from the author's repository if available","Use the official phishlet 2.2.0 format docs: https://github.com/kgretzky/evilginx2/wiki/Phishlet-File-Format-(2.2.0)"],"exampleFix":"# before (legacy)\nmin_ver: 2.1.0\nuser_regex:\n  key: '(login)'\n  re: '(.*)'\n# after\nmin_ver: 2.3.0\ncredentials:\n  username:\n    type: 'post'\n    key: 'login'\n    search: '(.*)'\n  password:\n    type: 'post'\n    key: 'password'\n    search: '(.*)'","handlingStrategy":"validation","validationCode":"// check min_ver before loading\nif v, _ := parseVersion(yaml \"min_ver\"); !isVersionHigherEqual(v, \"2.2.0\") {\n    return fmt.Errorf(\"phishlet %s must declare min_ver >= 2.2.0\", name)\n}","typeGuard":"func isPhishlet22Compatible(minVer string) bool {\n    v, err := parseVersion(minVer)\n    return err == nil && isVersionHigherEqual(&v, \"2.2.0\")\n}","tryCatchPattern":"if err := cfg.LoadPhishlet(name, path, nil); err != nil {\n    if strings.Contains(err.Error(), \"incompatible with current version\") {\n        log.Error(\"upgrade the phishlet to 2.2.0 format before use: %v\", err)\n    }\n}","preventionTips":["Only download phishlets from sources keeping pace with evilginx2 releases","Check the `min_ver` field at the top of each phishlet before importing","Run the migration checklist (triggers_on, orig_sub, credentials section) once when porting old phishlets","Pin phishlet collections to a known compatible version"],"tags":["phishlet","configuration","version-compatibility","migration"],"backgroundTag":"schema-version-too-old","analyzedSha":"4c0988a1d9db4d172a185e979a38bfd0efdb5830","analyzedAt":"2026-09-05T19:23:07.238Z","contentChangedAt":"2026-09-05T19:23:07.238Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}