saltstack / saltstack/salt

[Bug]: pillar masking in 3008 breaks the world

Open
#69,599 7 comments 11 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
15.7k
Forks
5.6k
Avg merge
2d 44m
Merged PRs (30d)
80

Description

What happened?

In 3008 a new feature as introduced: masking of pillar data. This breaks everything. On every call site to pillar.get, pillar.item or pillar.items, I now have to include unmask=True. Also, to not break compatibility with 3007, this parameter must only be added if on 3008. There's literally not a single call site where I can omit unmask=True, because if I need to read the pillar, I need to read the pillar. Just in our application alone, this amounts to almost 100 call sites and I've spoken to our infra team, and they think this can go into the hundreds for them. IMHO this pillar masking should not be enabled by default when calling these execution modules (either via salt-call or from another execution module). If some script or tool needs to read the data, returning ****** is no good and will for sure break that script.

Also, the fact that only string values are obfuscated seems completely arbitrary. Numbers and even booleans can also contain sensitive data. For example, someone could store an RSA key by representing p and q as numbers.

Please disable this pillar masking for manual invocations of an execution module by default or at least allow it to be disabled globally.

Type of salt install

Official rpm

Major version

3008.x

What supported OS are you seeing the problem on? Can select multiple. (If bug appears on an unsupported OS, please open a GitHub Discussion instead)

almalinux-9

salt --versions-report output
# salt --versions-report
Salt Version:
          Salt: 3008.1
 
Python Version:
        Python: 3.14.6 (main, Jun 11 2026, 02:19:05) [GCC 11.2.0]
 
Dependency Versions:
          cffi: 2.0.0
      cherrypy: 18.10.0
  cryptography: 48.0.0
      dateutil: 2.9.0.post0
     docker-py: Not Installed
         gitdb: 4.0.12
     gitpython: Not Installed
        Jinja2: 3.1.6
       libgit2: Not Installed
  looseversion: 1.3.0
      M2Crypto: Not Installed
          Mako: Not Installed
       msgpack: 1.1.2
  msgpack-pure: Not Installed
  mysql-python: Not Installed
     packaging: 24.0
     pycparser: 3.00
      pycrypto: Not Installed
  pycryptodome: 3.23.0
        pygit2: Not Installed
  python-gnupg: 0.5.6
        PyYAML: 6.0.3
         PyZMQ: 27.1.0
        relenv: 0.22.14
         smmap: 5.0.2
       timelib: 0.3.0
       Tornado: 6.5.7
           ZMQ: 4.3.5
 
Salt Package Information:
  Package Type: onedir
 
System Versions:
          dist: almalinux 9.8 Olive Jaguar
        locale: utf-8
       machine: x86_64
       release: 7.0.0-27-generic
        system: Linux
       version: AlmaLinux 9.8 Olive Jaguar

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing pillar.get, pillar.item, and pillar.items from manual salt-call invocations and calls between execution modules, comparing behavior in Salt 3007 and 3008. Determine where pillar masking is enabled and how a global or invocation-specific default would apply. Done means manual execution-module calls no longer unexpectedly return masked pillar data while the requested compatibility behavior remains covered by tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
devops, infrastructure
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.