VYPR
High severityNVD Advisory· Published Mar 3, 2020· Updated Aug 4, 2024

CVE-2020-1734

CVE-2020-1734

Description

A flaw was found in the pipe lookup plugin of ansible. Arbitrary commands can be run, when the pipe lookup plugin uses subprocess.Popen() with shell=True, by overwriting ansible facts and the variable is not escaped by quote plugin. An attacker could take advantage and run arbitrary commands by overwriting the ansible facts.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
ansiblePyPI
>= 2.10.0a1, < 2.10.0rc12.10.0rc1
ansiblePyPI
>= 2.9.0a1, < 2.9.112.9.11
ansiblePyPI
< 2.8.132.8.13

Affected products

1

Patches

4
4f978af4ca16

[2.9] pipe: update docs for Popen with shell=True usage (#70603)

https://github.com/ansible/ansibleAbhijeet KasurdeJul 17, 2020via ghsa
2 files changed · +16 7
  • changelogs/fragments/70261_pipe_lookup.yml+2 0 added
    @@ -0,0 +1,2 @@
    +minor_changes:
    +- pipe lookup - update docs for Popen with shell=True usages (https://github.com/ansible/ansible/issues/70159).
    
  • lib/ansible/plugins/lookup/pipe.py+14 7 modified
    @@ -4,32 +4,39 @@
     from __future__ import (absolute_import, division, print_function)
     __metaclass__ = type
     
    -DOCUMENTATION = """
    +DOCUMENTATION = r"""
         lookup: pipe
         author: Daniel Hokka Zakrisson <daniel@hozac.com>
         version_added: "0.9"
         short_description: read output from a command
         description:
    -      - Run a command and return the output
    +      - Run a command and return the output.
         options:
           _terms:
    -        description: command(s) to run
    +        description: command(s) to run.
             required: True
         notes:
           - Like all lookups this runs on the Ansible controller and is unaffected by other keywords, such as become,
             so if you need to different permissions you must change the command or run Ansible as another user.
           - Alternatively you can use a shell/command task that runs against localhost and registers the result.
    +      - Pipe lookup internally invokes Popen with shell=True (this is required and intentional).
    +        This type of invocation is considered as security issue if appropriate care is not taken to sanitize any user provided or variable input.
    +        It is strongly recommended to pass user input or variable input via quote filter before using with pipe lookup.
    +        See example section for this.
    +        Read more about this L(Bandit B602 docs,https://bandit.readthedocs.io/en/latest/plugins/b602_subprocess_popen_with_shell_equals_true.html)
     """
     
    -EXAMPLES = """
    +EXAMPLES = r"""
     - name: raw result of running date command"
    -  debug: msg="{{ lookup('pipe','date') }}"
    +  debug:
    +    msg: "{{ lookup('pipe', 'date') }}"
     
     - name: Always use quote filter to make sure your variables are safe to use with shell
    -  debug: msg="{{ lookup('pipe','getent ' + myuser|quote ) }}"
    +  debug:
    +    msg: "{{ lookup('pipe', 'getent ' + myuser | quote ) }}"
     """
     
    -RETURN = """
    +RETURN = r"""
       _string:
         description:
           - stdout from command
    
963bdd9983b9

[2.10] pipe: update docs for Popen with shell=True usage (#70602)

https://github.com/ansible/ansibleAbhijeet KasurdeJul 17, 2020via ghsa
2 files changed · +16 7
  • changelogs/fragments/70261_pipe_lookup.yml+2 0 added
    @@ -0,0 +1,2 @@
    +minor_changes:
    +- pipe lookup - update docs for Popen with shell=True usages (https://github.com/ansible/ansible/issues/70159).
    
  • lib/ansible/plugins/lookup/pipe.py+14 7 modified
    @@ -4,32 +4,39 @@
     from __future__ import (absolute_import, division, print_function)
     __metaclass__ = type
     
    -DOCUMENTATION = """
    +DOCUMENTATION = r"""
         lookup: pipe
         author: Daniel Hokka Zakrisson <daniel@hozac.com>
         version_added: "0.9"
         short_description: read output from a command
         description:
    -      - Run a command and return the output
    +      - Run a command and return the output.
         options:
           _terms:
    -        description: command(s) to run
    +        description: command(s) to run.
             required: True
         notes:
           - Like all lookups this runs on the Ansible controller and is unaffected by other keywords, such as become,
             so if you need to different permissions you must change the command or run Ansible as another user.
           - Alternatively you can use a shell/command task that runs against localhost and registers the result.
    +      - Pipe lookup internally invokes Popen with shell=True (this is required and intentional).
    +        This type of invocation is considered as security issue if appropriate care is not taken to sanitize any user provided or variable input.
    +        It is strongly recommended to pass user input or variable input via quote filter before using with pipe lookup.
    +        See example section for this.
    +        Read more about this L(Bandit B602 docs,https://bandit.readthedocs.io/en/latest/plugins/b602_subprocess_popen_with_shell_equals_true.html)
     """
     
    -EXAMPLES = """
    +EXAMPLES = r"""
     - name: raw result of running date command"
    -  debug: msg="{{ lookup('pipe','date') }}"
    +  debug:
    +    msg: "{{ lookup('pipe', 'date') }}"
     
     - name: Always use quote filter to make sure your variables are safe to use with shell
    -  debug: msg="{{ lookup('pipe','getent ' + myuser|quote ) }}"
    +  debug:
    +    msg: "{{ lookup('pipe', 'getent ' + myuser | quote ) }}"
     """
     
    -RETURN = """
    +RETURN = r"""
       _string:
         description:
           - stdout from command
    
bff0724e9eab

[2.8] pipe: update docs for Popen with shell=True usage (#70604)

https://github.com/ansible/ansibleAbhijeet KasurdeJul 13, 2020via ghsa
2 files changed · +16 7
  • changelogs/fragments/70261_pipe_lookup.yml+2 0 added
    @@ -0,0 +1,2 @@
    +minor_changes:
    +- pipe lookup - update docs for Popen with shell=True usages (https://github.com/ansible/ansible/issues/70159).
    
  • lib/ansible/plugins/lookup/pipe.py+14 7 modified
    @@ -4,32 +4,39 @@
     from __future__ import (absolute_import, division, print_function)
     __metaclass__ = type
     
    -DOCUMENTATION = """
    +DOCUMENTATION = r"""
         lookup: pipe
         author: Daniel Hokka Zakrisson <daniel@hozac.com>
         version_added: "0.9"
         short_description: read output from a command
         description:
    -      - Run a command and return the output
    +      - Run a command and return the output.
         options:
           _terms:
    -        description: command(s) to run
    +        description: command(s) to run.
             required: True
         notes:
           - Like all lookups this runs on the Ansible controller and is unaffected by other keywords, such as become,
             so if you need to different permissions you must change the command or run Ansible as another user.
           - Alternatively you can use a shell/command task that runs against localhost and registers the result.
    +      - Pipe lookup internally invokes Popen with shell=True (this is required and intentional).
    +        This type of invocation is considered as security issue if appropriate care is not taken to sanitize any user provided or variable input.
    +        It is strongly recommended to pass user input or variable input via quote filter before using with pipe lookup.
    +        See example section for this.
    +        Read more about this L(Bandit B602 docs,https://bandit.readthedocs.io/en/latest/plugins/b602_subprocess_popen_with_shell_equals_true.html)
     """
     
    -EXAMPLES = """
    +EXAMPLES = r"""
     - name: raw result of running date command"
    -  debug: msg="{{ lookup('pipe','date') }}"
    +  debug:
    +    msg: "{{ lookup('pipe', 'date') }}"
     
     - name: Always use quote filter to make sure your variables are safe to use with shell
    -  debug: msg="{{ lookup('pipe','getent ' + myuser|quote ) }}"
    +  debug:
    +    msg: "{{ lookup('pipe', 'getent ' + myuser | quote ) }}"
     """
     
    -RETURN = """
    +RETURN = r"""
       _string:
         description:
           - stdout from command
    
e5649ca3e807

pipe: update docs for Popen with shell=True usage (#70596)

https://github.com/ansible/ansibleAbhijeet KasurdeJul 13, 2020via ghsa
2 files changed · +16 7
  • changelogs/fragments/70261_pipe_lookup.yml+2 0 added
    @@ -0,0 +1,2 @@
    +minor_changes:
    +- pipe lookup - update docs for Popen with shell=True usages (https://github.com/ansible/ansible/issues/70159).
    
  • lib/ansible/plugins/lookup/pipe.py+14 7 modified
    @@ -4,32 +4,39 @@
     from __future__ import (absolute_import, division, print_function)
     __metaclass__ = type
     
    -DOCUMENTATION = """
    +DOCUMENTATION = r"""
         lookup: pipe
         author: Daniel Hokka Zakrisson <daniel@hozac.com>
         version_added: "0.9"
         short_description: read output from a command
         description:
    -      - Run a command and return the output
    +      - Run a command and return the output.
         options:
           _terms:
    -        description: command(s) to run
    +        description: command(s) to run.
             required: True
         notes:
           - Like all lookups this runs on the Ansible controller and is unaffected by other keywords, such as become,
             so if you need to different permissions you must change the command or run Ansible as another user.
           - Alternatively you can use a shell/command task that runs against localhost and registers the result.
    +      - Pipe lookup internally invokes Popen with shell=True (this is required and intentional).
    +        This type of invocation is considered as security issue if appropriate care is not taken to sanitize any user provided or variable input.
    +        It is strongly recommended to pass user input or variable input via quote filter before using with pipe lookup.
    +        See example section for this.
    +        Read more about this L(Bandit B602 docs,https://bandit.readthedocs.io/en/latest/plugins/b602_subprocess_popen_with_shell_equals_true.html)
     """
     
    -EXAMPLES = """
    +EXAMPLES = r"""
     - name: raw result of running date command"
    -  debug: msg="{{ lookup('pipe','date') }}"
    +  debug:
    +    msg: "{{ lookup('pipe', 'date') }}"
     
     - name: Always use quote filter to make sure your variables are safe to use with shell
    -  debug: msg="{{ lookup('pipe','getent ' + myuser|quote ) }}"
    +  debug:
    +    msg: "{{ lookup('pipe', 'getent ' + myuser | quote ) }}"
     """
     
    -RETURN = """
    +RETURN = r"""
       _string:
         description:
           - stdout from command
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

15

News mentions

0

No linked articles in our index yet.