- 
                Notifications
    You must be signed in to change notification settings 
- Fork 1
Add DevSecOps page with security news and examples; update project dependencies #67
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| FROM alpine:3.14.0 | ||
| RUN echo "testuser:x:10999:10999:,,,:/home/testuser:/bin/bash" >> /etc/passwd && echo "testuser::18761:0:99999:7:::" >> /etc/shadow | 
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,189 @@ | ||
| resource "azurerm_resource_group" "myresourcegroup" { | ||
| name = "${var.prefix}-workshop" | ||
| location = var.location | ||
|  | ||
| tags = { | ||
| environment = "Production" | ||
| } | ||
| } | ||
|  | ||
| resource "azurerm_virtual_network" "vnet" { | ||
| name = "${var.prefix}-vnet" | ||
| location = azurerm_resource_group.myresourcegroup.location | ||
| address_space = [var.address_space] | ||
| resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
| } | ||
|  | ||
| resource "azurerm_subnet" "subnet" { | ||
| name = "${var.prefix}-subnet" | ||
| virtual_network_name = azurerm_virtual_network.vnet.name | ||
| resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
| address_prefixes = [var.subnet_prefix] | ||
| } | ||
|  | ||
| resource "azurerm_network_security_group" "catapp-sg" { | ||
| name = "${var.prefix}-sg" | ||
| location = var.location | ||
| resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
|  | ||
| security_rule { | ||
| name = "HTTP" | ||
| priority = 100 | ||
| direction = "Inbound" | ||
| access = "Allow" | ||
| protocol = "Tcp" | ||
| source_port_range = "*" | ||
| destination_port_range = "80" | ||
| source_address_prefix = "*" | ||
| destination_address_prefix = "*" | ||
| } | ||
|  | ||
| security_rule { | ||
| name = "HTTPS" | ||
| priority = 102 | ||
| direction = "Inbound" | ||
| access = "Allow" | ||
| protocol = "Tcp" | ||
| source_port_range = "*" | ||
| destination_port_range = "443" | ||
| source_address_prefix = "*" | ||
| destination_address_prefix = "*" | ||
| } | ||
|  | ||
| security_rule { | ||
| name = "SSH" | ||
| priority = 101 | ||
| direction = "Inbound" | ||
| access = "Allow" | ||
| protocol = "Tcp" | ||
| source_port_range = "*" | ||
| destination_port_range = "22" | ||
| source_address_prefix = "*" | ||
| destination_address_prefix = "*" | ||
| } | ||
| } | ||
| Check failureCode scanning / checkov Ensure that HTTP (port 80) access is restricted from the internet Error 
      Ensure that HTTP (port 80) access is restricted from the internet
     Check failureCode scanning / checkov Ensure that SSH access is restricted from the internet Error 
      Ensure that SSH access is restricted from the internet
     | ||
| 
      Comment on lines
    
      +24
     to 
      +64
    
   Check failureCode scanning / defsec An inbound network security rule allows traffic from /0. Error 
      Security group rule allows ingress from public internet.
     
      Comment on lines
    
      +24
     to 
      +64
    
   Check failureCode scanning / defsec An inbound network security rule allows traffic from /0. Error 
      Security group rule allows ingress from public internet.
     
      Comment on lines
    
      +24
     to 
      +64
    
   Check failureCode scanning / defsec SSH access should not be accessible from the Internet, should be blocked on port 22 Error 
      Security group rule allows ingress to SSH port from multiple public internet addresses.
     | ||
|  | ||
| resource "azurerm_network_interface" "catapp-nic" { | ||
| name = "${var.prefix}-catapp-nic" | ||
| location = var.location | ||
| resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
|  | ||
| ip_configuration { | ||
| name = "${var.prefix}ipconfig" | ||
| subnet_id = azurerm_subnet.subnet.id | ||
| private_ip_address_allocation = "Dynamic" | ||
| public_ip_address_id = azurerm_public_ip.catapp-pip.id | ||
| } | ||
| } | ||
| Check noticeCode scanning / checkov Ensure that Network Interfaces don't use public IPs Note 
      Ensure that Network Interfaces don't use public IPs
     | ||
|  | ||
| resource "azurerm_network_interface_security_group_association" "catapp-nic-sg-ass" { | ||
| network_interface_id = azurerm_network_interface.catapp-nic.id | ||
| network_security_group_id = azurerm_network_security_group.catapp-sg.id | ||
| } | ||
|  | ||
| resource "azurerm_public_ip" "catapp-pip" { | ||
| name = "${var.prefix}-ip" | ||
| location = var.location | ||
| resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
| allocation_method = "Dynamic" | ||
| domain_name_label = "${var.prefix}-meow" | ||
| } | ||
|  | ||
| resource "azurerm_virtual_machine" "catapp" { | ||
| name = "${var.prefix}-meow" | ||
| location = var.location | ||
| resource_group_name = azurerm_resource_group.myresourcegroup.name | ||
| vm_size = var.vm_size | ||
|  | ||
| network_interface_ids = [azurerm_network_interface.catapp-nic.id] | ||
| delete_os_disk_on_termination = "true" | ||
|  | ||
| storage_image_reference { | ||
| publisher = var.image_publisher | ||
| offer = var.image_offer | ||
| sku = var.image_sku | ||
| version = var.image_version | ||
| } | ||
|  | ||
| storage_os_disk { | ||
| name = "${var.prefix}-osdisk" | ||
| managed_disk_type = "Standard_LRS" | ||
| caching = "ReadWrite" | ||
| create_option = "FromImage" | ||
| } | ||
|  | ||
| os_profile { | ||
| computer_name = var.prefix | ||
| admin_username = var.admin_username | ||
| admin_password = var.admin_password | ||
| } | ||
|  | ||
| os_profile_linux_config { | ||
| disable_password_authentication = false | ||
| } | ||
|  | ||
| tags = {} | ||
|  | ||
| # Added to allow destroy to work correctly. | ||
| depends_on = [azurerm_network_interface_security_group_association.catapp-nic-sg-ass] | ||
| } | ||
| Check noticeCode scanning / checkov Ensure Azure Instance does not use basic authentication(Use SSH Key Instead) Note 
      Ensure Azure Instance does not use basic authentication(Use SSH Key Instead)
     Check noticeCode scanning / checkov Ensure that Microsoft Antimalware is configured to automatically updates for Virtual Machines Note 
      Ensure that Microsoft Antimalware is configured to automatically updates for Virtual Machines
     Check noticeCode scanning / checkov Ensure that virtual machines are backed up using Azure Backup Note 
      Ensure that virtual machines are backed up using Azure Backup
     | ||
| 
      Comment on lines
    
      +92
     to 
      +129
    
   Check failureCode scanning / defsec Password authentication should be disabled on Azure virtual machines Error 
      Linux virtual machine allows password authentication.
     | ||
|  | ||
| # We're using a little trick here so we can run the provisioner without | ||
| # destroying the VM. Do not do this in production. | ||
|  | ||
| # If you need ongoing management (Day N) of your virtual machines a tool such | ||
| # as Chef or Puppet is a better choice. These tools track the state of | ||
| # individual files and can keep them in the correct configuration. | ||
|  | ||
| # Here we do the following steps: | ||
| # Sync everything in files/ to the remote VM. | ||
| # Set up some environment variables for our script. | ||
| # Add execute permissions to our scripts. | ||
| # Run the deploy_app.sh script. | ||
| resource "null_resource" "configure-cat-app" { | ||
| depends_on = [ | ||
| azurerm_virtual_machine.catapp, | ||
| ] | ||
|  | ||
| # Terraform 0.11 | ||
| # triggers { | ||
| # build_number = "${timestamp()}" | ||
| # } | ||
|  | ||
| # Terraform 0.12 | ||
| triggers = { | ||
| build_number = timestamp() | ||
| } | ||
|  | ||
| provisioner "file" { | ||
| source = "files/" | ||
| destination = "/home/${var.admin_username}/" | ||
|  | ||
| connection { | ||
| type = "ssh" | ||
| user = var.admin_username | ||
| password = var.admin_password | ||
| host = azurerm_public_ip.catapp-pip.fqdn | ||
| } | ||
| } | ||
|  | ||
| provisioner "remote-exec" { | ||
| inline = [ | ||
| "sudo apt -y update", | ||
| "sleep 15", | ||
| "sudo apt -y update", | ||
| "sudo apt -y install apache2", | ||
| "sudo systemctl start apache2", | ||
| "sudo chown -R ${var.admin_username}:${var.admin_username} /var/www/html", | ||
| "chmod +x *.sh", | ||
| "PLACEHOLDER=${var.placeholder} WIDTH=${var.width} HEIGHT=${var.height} PREFIX=${var.prefix} ./deploy_app.sh", | ||
| ] | ||
|  | ||
| connection { | ||
| type = "ssh" | ||
| user = var.admin_username | ||
| password = var.admin_password | ||
| host = azurerm_public_ip.catapp-pip.fqdn | ||
| } | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,2 @@ | ||||||
| let injection = "Hello, security vulnerabilities!"; | ||||||
| eval(`console.log(\"${injection}\");`); | ||||||
| 
     | ||||||
| eval(`console.log(\"${injection}\");`); | |
| console.log(injection); | 
| Original file line number | Diff line number | Diff line change | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,26 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #Commented out sample to pass scanning | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import hashlib | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| print("I am very insecure. Bandit thinks so too.") | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #B110 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| xs=[1,2,3,4,5,6,7,8] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| try: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| print(xs[7]) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| print(xs[8]) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| except: pass | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Check noticeCode scanning / CodeQL Empty except Note 
      'except' clause does nothing but pass and there is no explanatory comment.
               Copilot AutofixAI 6 months ago To fix the issue, we need to replace the empty  
 For this specific case: 
 
  Suggested changeset
  1
 
      
    samples/insecure-01.py
     
 
 
                  Copilot is powered by AI and may make mistakes. Always verify output.
                 Positive FeedbackNegative Feedback 
                  
                  Refresh and try again.
                 Check noticeCode scanning / CodeQL Except block handles 'BaseException' Note 
      Except block directly handles BaseException.
               Copilot AutofixAI 6 months ago To fix the issue, we will replace the bare  
  Suggested changeset
  1
 
      
    samples/insecure-01.py
     
 
 
                  Copilot is powered by AI and may make mistakes. Always verify output.
                 Positive FeedbackNegative Feedback 
                  
                  Refresh and try again.
                 Check warningCode scanning / Bandit Try, Except, Pass detected. Warning 
      Try, Except, Pass detected.
     | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ys=[1, 2, None, None] | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| for y in ys: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| try: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| print(str(y+3)) #TypeErrors ahead | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| except: continue #not how to handle them | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Check noticeCode scanning / CodeQL Except block handles 'BaseException' Note 
      Except block directly handles BaseException.
               Copilot AutofixAI 6 months ago To fix the issue, the  Additionally, the  
  Suggested changeset
  1
 
      
    samples/insecure-01.py
     
 
 
                  Copilot is powered by AI and may make mistakes. Always verify output.
                 Positive FeedbackNegative Feedback 
                  
                  Refresh and try again.
                 Check warningCode scanning / Bandit Try, Except, Continue detected. Warning 
      Try, Except, Continue detected.
     
      Comment on lines
    
      +10
     to 
      +16
    
   
     | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| except: pass | |
| ys=[1, 2, None, None] | |
| for y in ys: | |
| try: | |
| print(str(y+3)) #TypeErrors ahead | |
| except: continue #not how to handle them | |
| except IndexError as e: | |
| print(f"IndexError occurred: {e}") | |
| ys=[1, 2, None, None] | |
| for y in ys: | |
| try: | |
| print(str(y+3)) #TypeErrors ahead | |
| except TypeError as e: | |
| print(f"TypeError occurred: {e}") | |
| continue | 
Check notice
Code scanning / CodeQL
Unused import Note
          
            
              
                
              
            
            Show autofix suggestion
            Hide autofix suggestion
          
      Copilot Autofix
AI 6 months ago
To fix the problem, we should remove the unused import telnetlib statement from the code. This will eliminate the unnecessary dependency and improve code readability without affecting the functionality of the script.
| @@ -18,3 +18,2 @@ | ||
| #some imports | ||
| import telnetlib | ||
| import ftplib | 
Check notice
Code scanning / CodeQL
Unused import Note
          
            
              
                
              
            
            Show autofix suggestion
            Hide autofix suggestion
          
      Copilot Autofix
AI 6 months ago
To fix the problem, we will remove the unused import ftplib statement from the code. This will eliminate the unnecessary dependency and improve code readability without affecting the functionality of the script.
| @@ -19,3 +19,2 @@ | ||
| import telnetlib | ||
| import ftplib | ||
|  | 
Check warning
Code scanning / Bandit
Use of insecure MD2, MD4, MD5, or SHA1 hash function. Warning
Check warning
Code scanning / Bandit
Use of insecure MD2, MD4, MD5, or SHA1 hash function. Warning
Check failure
Code scanning / defsec
An inbound network security rule allows traffic from /0. Error