peass-ng/PEASS-ng · error · Exception
Global Variables '{', '.join(not_defined_global_vars)}' in m
Error message
Global Variables '{', '.join(not_defined_global_vars)}' in module {path} are not defined inside the 'Generated Global Variables' metadata What it means
The builder statically scans the module's shell code for $VARIABLE references and requires every non-builtin variable to be declared either in '# Global Variables:', '# Generated Global Variables:', the linux_global_vars allowlist, the PSTORAGE_ namespace, or the base variables module. Undeclared variables would be empty at runtime, silently producing wrong results, so the builder refuses to compile the module.
Source
Thrown at linPEAS/builder/src/linpeasModule.py:227
"IDENTITY_HEADER",
"KUBERNETES_SERVICE_PORT_HTTPS",
"KUBERNETES_SERVICE_HOST"
]
main_base = None
# Base global variables don't need to be defined
if self.id != "BS_variables_base":
main_base = LinpeasModule(os.path.join(os.path.dirname(__file__), "..", "linpeas_parts", "linpeas_base", "0_variables_base.sh"))
not_defined_global_vars = []
for var in self.extract_variables(self.sh_code):
if len(var) > 2 and not var in linux_global_vars and var not in self.global_variables and var not in self.generated_global_variables:
if not var.startswith("PSTORAGE_"):
if not main_base or var not in main_base.generated_global_variables:
not_defined_global_vars.append("$"+var)
if not_defined_global_vars:
raise Exception(f"Global Variables '{', '.join(not_defined_global_vars)}' in module {path} are not defined inside the 'Generated Global Variables' metadata")
def __eq__(self, other):
# Check if other object is an instance of LinpeasModule
if isinstance(other, LinpeasModule):
return self.id == other.id
return NotImplemented # Return NotImplemented for unsupported comparisons
def extract_function_names(self):
# This regular expression pattern matches function definitions in sh code
pattern = r'\b(\w+)\s*\(\s*\)\s*{'
return re.findall(pattern, self.sh_code)
def extract_variables(self, sh_code):
# This regex pattern matches variables in the form $VAR_NAME or ${VAR_NAME}
pattern = r'\$({?([a-zA-Z_][a-zA-Z0-9_]*)}?)'
matches = re.findall(pattern, sh_code)
# Extract the variable name from each matchView on GitHub (pinned to 53fb989abc)
Solutions
- Add the variable to the module's '# Generated Global Variables:' metadata and generate/emit it in the code
- Or add it to '# Global Variables:' if it comes from another module/base part
- Fix the typo if the variable name in code does not match the declared one
- Move shared variables into linpeas_parts/linpeas_base/0_variables_base.sh
Example fix
# before echo "Found: $FOUND binaries" # after # (metadata) # Generated Global Variables: FOUND # (code) FOUND=$(echo "$FOUND" | sed 's/ /,/g') echo "Found: $FOUND binaries"
Defensive patterns
Strategy: validation
Validate before calling
import re
code = open(module_path).read()
used_vars = {v for v in re.findall(r'\$(\w+)', code) if len(v) > 2}
declared = set(parse_metadata("Global Variables")) | set(parse_metadata("Generated Global Variables"))
missing = {v for v in used_vars if v not in declared and not v.startswith("PSTORAGE_")}
assert not missing, f"Undeclared: {missing}" Try / catch
try:
LinpeasModule(path)
except Exception as e:
print(f"Module {path} failed validation: {e}")
# add missing vars to metadata and retry Prevention
- Every new $VAR added to module code must be declared in metadata
- Declare variables in the base variables file for cross-module reuse
- Use the PSTORAGE_ prefix convention for auto-generated storage variables
When it happens
Trigger: LinpeasModule.__init__ during build when module code references e.g. '$MY_VAR' with len>2, not in linux_global_vars, not in either metadata variable list, not prefixed PSTORAGE_, and not defined in 0_variables_base.sh.
Common situations: Adding new shell code that uses a variable without updating the '# Generated Global Variables:' header; typo-ing a variable name so it no longer matches the declared one; relying on a variable that only exists in another module instead of the base file.
Related errors
- Function '{func}' in module {path} is imported from itself
- Variable '{var}' in module {path} is imported from itself
- Item should be an instance of LinpeasModule
- Something falied reading PEASS script from #{url_peass}
- Value cannot be null. Parameter name: path
AI-assisted analysis of peass-ng/PEASS-ng@53fb989abc (2026-09-02).
Data as JSON: /api/errors/5606fba84d60fab3.
Report an issue: GitHub.