
    >/i                         S r SSKrSSKrSSKJr  SSKJr  S r\R                  " S5      \R                  " S5      S 5       5       r
g)	aG  
==================================================
B103: Test for setting permissive file permissions
==================================================

POSIX based operating systems utilize a permissions model to protect access to
parts of the file system. This model supports three roles "owner", "group"
and "world" each role may have a combination of "read", "write" or "execute"
flags sets. Python provides ``chmod`` to manipulate POSIX style permissions.

This plugin test looks for the use of ``chmod`` and will alert when it is used
to set particularly permissive control flags. A MEDIUM warning is generated if
a file is set to group write or executable and a HIGH warning is reported if a
file is set world write or executable. Warnings are given with HIGH confidence.

:Example:

.. code-block:: none

    >> Issue: Probable insecure usage of temp file/directory.
       Severity: Medium   Confidence: Medium
       CWE: CWE-732 (https://cwe.mitre.org/data/definitions/732.html)
       Location: ./examples/os-chmod.py:15
    14  os.chmod('/etc/hosts', 0o777)
    15  os.chmod('/tmp/oh_hai', 0x1ff)
    16  os.chmod('/etc/passwd', stat.S_IRWXU)

    >> Issue: Chmod setting a permissive mask 0777 on file (key_file).
       Severity: High   Confidence: High
       CWE: CWE-732 (https://cwe.mitre.org/data/definitions/732.html)
       Location: ./examples/os-chmod.py:17
    16  os.chmod('/etc/passwd', stat.S_IRWXU)
    17  os.chmod(key_file, 0o777)
    18

.. seealso::

 - https://security.openstack.org/guidelines/dg_apply-restrictive-file-permissions.html
 - https://en.wikipedia.org/wiki/File_system_permissions
 - https://security.openstack.org
 - https://cwe.mitre.org/data/definitions/732.html

.. versionadded:: 0.9.0

.. versionchanged:: 1.7.3
    CWE information added

.. versionchanged:: 1.7.5
    Added checks for S_IWGRP and S_IXOTH

    N)issue)test_propertiesc                     U [         R                  -  =(       dG    U [         R                  -  =(       d-    U [         R                  -  =(       d    U [         R                  -  $ )N)statS_IWOTHS_IWGRPS_IXGRPS_IXOTH)modes    e/home/james-whalen/.local/lib/python3.13/site-packages/bandit/plugins/general_bad_file_permissions.py_stat_is_dangerousr   ?   sH    t|| 	$,,	$,,	 $,,	    CallB103c           
         SU R                   ;   a  U R                  S:X  a  U R                  S5      nUb  [        U[        5      (       a  [        U5      (       a  U[        R                  -  (       a  [        R                  nO[        R                  nU R                  S5      nUc  Sn[        R                  " U[        R                  [        R                  R                  S[        U5      < SU< S3S	9$ g g g g g )
Nchmod      r   z
NOT PARSEDz Chmod setting a permissive mask z
 on file (z).)severity
confidencecwetext)call_function_namecall_args_countget_call_arg_at_position
isinstanceintr   r   r   banditHIGHMEDIUMIssuer   CweINCORRECT_PERMISSION_ASSIGNMENToct)contextr   	sev_levelfilenames       r   set_bad_file_permissionsr(   H   s     ',,,""a'33A6D  tS))&t,, $,,& &I &I";;A>#+H||&%{{		AA4y(,	  - * !	 ( -r   )__doc__r   r   bandit.corer   r   testr   checkstest_idr(    r   r   <module>r/      sL   
2f    / Vf  r   