계: Code Quality

코드 품질이 낮으면 예측할 수 없는 동작이 발생합니다. 사용자 입장에서는 사용 편의성이 떨어지는 것으로 나타나는 경우가 많습니다. 공격자에게는 예상치 못한 방법으로 시스템에 부담을 줄 수 있는 기회가 됩니다.

1 개 항목 찾음
취약점
Abstract
사용이 금지되거나 더 이상 사용되지 않는 함수를 사용하면 코드 무시가 발생할 수 있습니다.
Explanation
일반적으로 프로그래밍 언어가 발전하면서 메서드가 사용할 수 없게 되는 경우가 있는데 그 이유는 다음과 같습니다.

- 언어의 발전
- 효율적이고 안전한 작업 수행 방법에 대한 이해도
향상
- 특정 작업을 규정하는 규칙의 변화

언어에서 삭제되는 문은 일반적으로 같은 작업을 더 나은 다른 방식으로 수행하는 새 문으로 교체됩니다.

특히 SAP ABAP는 ABAP 개체(ABAP의 개체 지향 확장)를 포함하고 유니코드 호환 환경에서 작동하도록 발전했습니다. 그 결과, 클래스 내 또는 유니코드 프로그램 내에서 더 엄격한 구문이 강제 실행됩니다. 더 이상 사용되지 않는 구성이 이전 버전과의 호환성 때문에 계속 유지되지만 클래스 외부 또는 비유니코드 프로그램에서만 사용할 수 있습니다. 더 이상 사용되지 않는 모든 언어 요소에는 프로그램의 효율성 및 가독성을 높이는 대체 구성이 있습니다. 더 이상 사용되지 않는 구문 내에 존재하는 대다수의 암시적이고 모호한 유형/길이/메모리 지정은 새로운 구문에서는 좀 더 정확하고 확실한 방식으로 지정되어야 합니다. 이해와 유지가 더 쉽고 더 강력한 프로그램을 만들 수 있도록 새로운 구문을 적용하는 것이 좋습니다.


보안 위험이 있다고 해서 모든 함수를 사용하지 않거나 바꾸는 것은 아닙니다. 하지만 사용하지 않는 함수가 있으면 주변의 코드가 무시되어 복구할 수 없는 상태가 되는 경우가 많습니다. 소프트웨어 보안은 아주 오랜 동안 우선 순위가 낮거나 심지어 고려 대상도 아니었습니다. 사용이 금지되거나 더 이상 사용되지 않는 함수를 프로그램에서 사용하는 경우, 주위에 보안 문제가 발생할 가능성이 높아집니다.
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1.0
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5.0
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 2
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 477
[6] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002617
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-2 Flaw Remediation (P1)
[8] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-2 Flaw Remediation
[9] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.14.6 Configuration Architectural Requirements (L2 L3)
[10] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002610 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002610 CAT II
[12] Standards Mapping - Smart Contract Weakness Classification SWC-111
desc.semantic.abap.obsolete
Abstract
사용이 금지되거나 더 이상 사용되지 않는 함수를 사용하면 코드 무시가 발생할 수 있습니다.
Explanation
프로그래밍 언어가 발전하면서 함수가 사용할 수 없게 되는 경우가 있는데 그 이유는 다음과 같습니다.

- 언어의 발전
- 효율적이고 안전한 작업 수행 방법에 대한 이해도
향상
- 특정 작업을 규정하는 규칙의 변화


언어에서 삭제되는 함수는 일반적으로 같은 작업을 더 나은 다른 방식으로 수행하는 새 함수로 교체됩니다.
예제: 다음 코드는 새 SqlClientPermission 개체를 생성하는데, 이는 사용자에게 데이터베이스 연결을 허용하는 방법을 규정합니다. 이 예제에서 프로그램은 구성자에게 false를 두 번째 매개 변수로 전달하는데, 이 값은 사용자가 빈 암호로 연결할 경우의 허용 여부를 결정합니다. 이 매개 변수에 false를 전달하는 것은 빈 암호를 허용할 수 없다는 뜻입니다.


...
SCP = new SqlClientPermission(pstate, false);
...


하지만 첫 번째 매개 변수로 전달되는 PermissionState 개체가 두 번째 매개 변수에 전달되는 값을 대체하기 때문에 구성자는 데이터베이스 연결에 빈 암호를 허용합니다. 이는 두 번째 인수에 위배됩니다. 빈 암호를 허용하지 않으려면 프로그램이 PermissionState.None을 구성자의 첫 번째 매개 변수에 전달해야 합니다. 이 기능상의 모호함 때문에 두 개의 매개 변수를 사용하는 SqlClientPermission 구성자 버전을 동일한 수준의 정보를 전달하면서 잘못 해석될 위험이 없는 단일 매개 변수 버전으로 교체했습니다.

보안 위험이 있다고 해서 모든 함수를 사용하지 않거나 바꾸는 것은 아닙니다. 하지만 사용하지 않는 함수가 있으면 주변의 코드가 무시되어 복구할 수 없는 상태가 되는 경우가 많습니다. 소프트웨어 보안은 아주 오랜 동안 우선 순위가 낮거나 심지어 고려 대상도 아니었습니다. 사용이 금지되거나 더 이상 사용되지 않는 함수를 프로그램에서 사용하는 경우, 주위에 보안 문제가 발생할 가능성이 높아집니다.
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1.0
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5.0
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 2
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 477
[6] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002617
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-2 Flaw Remediation (P1)
[8] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-2 Flaw Remediation
[9] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.14.6 Configuration Architectural Requirements (L2 L3)
[10] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002610 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002610 CAT II
[12] Standards Mapping - Smart Contract Weakness Classification SWC-111
desc.semantic.dotnet.obsolete
Abstract
사용이 금지되거나 더 이상 사용되지 않는 함수를 사용하면 코드 무시가 발생할 수 있습니다.
Explanation
프로그래밍 언어가 발전하면서 함수가 사용할 수 없게 되는 경우가 있는데 그 이유는 다음과 같습니다.

- 언어의 발전
- 효율적이고 안전한 작업 수행 방법에 대한 이해도 향상
- 특정 작업을 규정하는 규칙의 변화

삭제되는 함수는 일반적으로 같은 작업을 더 나은 다른 방식으로 수행하는 새 함수로 교체됩니다.
예제: 다음 코드는 사용하지 않는 함수 getpw()를 통해 일반 텍스트 암호가 사용자의 암호화된 암호와 일치하는지 확인합니다. 암호가 올바르면 함수는 result를 1로 설정하고 그렇지 않으면 0으로 설정합니다.


...
getpw(uid, pwdline);
for (i=0; i<3; i++){
cryptpw=strtok(pwdline, ":");
pwdline=0;
}
result = strcmp(crypt(plainpw,cryptpw), cryptpw) == 0;
...


아래 코드는 정상적으로 작동하는 경우도 많지만, getpw() 함수를 사용하면 보안상 문제가 될 수 있습니다. 이 함수가 두 번째 매개 변수로 전달되는 버퍼를 overflow할 수 있기 때문입니다. 이 같은 취약성 때문에 getpw()getpwuid()로 대체되었습니다. getpwuid()는 getpw()와 같은 조회 작업을 수행하지만 정적으로 할당되는 구조에 대한 포인터를 반환하여 위험을 완화합니다.

보안 위험이 있다고 해서 모든 함수를 사용하지 않거나 바꾸는 것은 아닙니다. 하지만 사용하지 않는 함수가 있으면 주변의 코드가 무시되어 복구할 수 없는 상태가 되는 경우가 많습니다. 소프트웨어 보안은 아주 오랜 동안 우선 순위가 낮거나 심지어 고려 대상도 아니었습니다. 사용이 금지되거나 더 이상 사용되지 않는 함수를 프로그램에서 사용하는 경우, 주위에 보안 문제가 발생할 가능성이 높아집니다.
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1.0
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5.0
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 2
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 477
[6] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002617
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-2 Flaw Remediation (P1)
[8] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-2 Flaw Remediation
[9] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.14.6 Configuration Architectural Requirements (L2 L3)
[10] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002610 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002610 CAT II
[12] Standards Mapping - Smart Contract Weakness Classification SWC-111
desc.semantic.cpp.obsolete
Abstract
사용이 금지되거나 더 이상 사용되지 않는 함수를 사용하면 코드 무시가 발생하거나 오래된 버전의 ColdFusion을 사용하게 될 수 있습니다.
Explanation
프로그래밍 언어가 발전하면서 메서드가 사용할 수 없게 되는 경우가 있는데 그 이유는 다음과 같습니다.

- 언어의 발전
- 효율적이고 안전한 작업 수행 방법에 대한 이해도
향상
- 특정 작업을 규정하는 규칙의 변화

언어에서 삭제되는 메서드는 일반적으로 같은 작업을 더 나은 다른 방식으로 수행하는 새 함수로 교체됩니다.


보안 위험이 있다고 해서 모든 함수를 사용하지 않거나 바꾸는 것은 아닙니다. 하지만 사용하지 않는 함수가 있으면 주변의 코드가 무시되어 복구할 수 없는 상태가 되는 경우가 많습니다. 소프트웨어 보안은 아주 오랜 동안 우선 순위가 낮거나 심지어 고려 대상도 아니었습니다. 사용이 금지되거나 더 이상 사용되지 않는 함수를 프로그램에서 사용하는 경우, 주위에 보안 문제가 발생할 가능성이 높아집니다.
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1.0
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5.0
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 2
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 477
[6] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002617
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-2 Flaw Remediation (P1)
[8] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-2 Flaw Remediation
[9] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.14.6 Configuration Architectural Requirements (L2 L3)
[10] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002610 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002610 CAT II
[12] Standards Mapping - Smart Contract Weakness Classification SWC-111
desc.semantic.cfml.obsolete
Abstract
사용이 금지되거나 더 이상 사용되지 않는 함수를 사용하면 코드 무시가 발생할 수 있습니다.
Explanation
프로그래밍 언어가 발전하면서 메서드가 사용할 수 없게 되는 경우가 있는데 그 이유는 다음과 같습니다.

- 언어의 발전
- 효율적이고 안전한 작업 수행 방법에 대한 이해도
향상
- 특정 작업을 규정하는 규칙의 변화

언어에서 삭제되는 메서드는 일반적으로 같은 작업을 더 나은 다른 방식으로 수행하는 새 함수로 교체됩니다.
예제: 다음 코드는 바이트 배열과 각 16비트 유니코드 문자의 상위 8비트를 지정하는 값에서 문자열 개체를 생성합니다.


...
String name = new String(nameBytes, highByte);
...


이 예에서 생성자는 nameBytes로 표시되는 문자열을 인코딩하는 데 사용되는 charset에 따라 바이트를 문자로 올바르게 변환하지 못할 수 있습니다. 문자열을 인코딩하는 데 사용되는 charset의 진화로 인해 이 생성자는 더 이상 사용되지 않으며 변환을 위해 바이트를 인코딩하는 데 사용되는 charset의 이름을 매개 변수 중 하나로 받아들이는 생성자로 교체되었습니다.

보안 위험이 있다고 해서 모든 함수를 사용하지 않거나 바꾸는 것은 아닙니다. 하지만 사용하지 않는 함수가 있으면 주변의 코드가 무시되어 복구할 수 없는 상태가 되는 경우가 많습니다. 소프트웨어 보안은 아주 오랜 동안 우선 순위가 낮거나 심지어 고려 대상도 아니었습니다. 사용이 금지되거나 더 이상 사용되지 않는 함수를 프로그램에서 사용하는 경우, 주위에 보안 문제가 발생할 가능성이 높아집니다.
References
[1] MET02-J. Do not use deprecated or obsolete classes or methods CERT
[2] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1.0
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5.0
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 2
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[6] Standards Mapping - Common Weakness Enumeration CWE ID 477
[7] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002617
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-2 Flaw Remediation (P1)
[9] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-2 Flaw Remediation
[10] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.14.6 Configuration Architectural Requirements (L2 L3)
[11] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002610 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002610 CAT II
[13] Standards Mapping - Smart Contract Weakness Classification SWC-111
desc.semantic.java.obsolete
Abstract
사용이 금지되거나 더 이상 사용되지 않는 함수를 사용하면 코드 무시가 발생할 수 있습니다.
Explanation
프로그래밍 언어가 발전하면서 메서드가 사용할 수 없게 되는 경우가 있는데 그 이유는 다음과 같습니다.

- 언어의 발전
- 효율적이고 안전한 작업 수행 방법에 대한 이해도
향상
- 특정 작업을 규정하는 규칙의 변화

언어에서 삭제되는 메서드는 일반적으로 같은 작업을 더 나은 다른 방식으로 수행하는 새 함수로 교체됩니다.
예제: 다음 코드에서는 우발적으로 릴리스 내에 관여하기 때문에 사용하지 않도록 문서에 명시적으로 지정된 Digest::HMAC stdlib를 사용합니다.


require 'digest/hmac'

hmac = Digest::HMAC.new("foo", Digest::RMD160)
...
hmac.update(buf)
...


이 예제에서 Digest::HMAC 클래스는 릴리스 내에 우발적으로 포함되기 때문에 관련되는 즉시 사용 중지되었습니다. 실험적 코드 및 적절하게 테스트되지 않은 코드 때문에 이 클래스가 예상대로 작동하지 않을 가능성이 있으므로, 특히 암호화 기능과 HMAC의 관련을 고려할 때 이 클래스는 사용하지 않아야 합니다.

보안 위험이 있다고 해서 모든 함수를 사용하지 않거나 바꾸는 것은 아닙니다. 하지만 사용하지 않는 함수가 있으면 주변의 코드가 무시되어 복구할 수 없는 상태가 되는 경우가 많습니다. 소프트웨어 보안은 아주 오랜 동안 우선 순위가 낮거나 심지어 고려 대상도 아니었습니다. 사용이 금지되거나 더 이상 사용되지 않는 함수를 프로그램에서 사용하는 경우, 주위에 보안 문제가 발생할 가능성이 높아집니다.
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1.0
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5.0
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 2
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 477
[6] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002617
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-2 Flaw Remediation (P1)
[8] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-2 Flaw Remediation
[9] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.14.6 Configuration Architectural Requirements (L2 L3)
[10] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002610 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002610 CAT II
[12] Standards Mapping - Smart Contract Weakness Classification SWC-111
desc.structural.ruby.obsolete
Abstract
사용이 중단된 함수가 사용됩니다.
Explanation
스마트 계약은 빠르게 실행되므로 최신 컴파일러 버전에서 특정 함수와 연산자의 사용이 중단될 수 있습니다. 코드에서 이러한 함수와 연산자를 사용하면 코드 품질이 낮아지거나 의도하지 않은 부작용 및/또는 컴파일 오류가 발생할 수 있습니다.

예제 1: 다음 코드는 block.blockhash()를 사용하여 현재 블록의 해시를 가져옵니다. 그런데 이 함수는 Solidity 컴파일러 0.5.0 버전부터 사용이 중단되었습니다.


bytes32 blockhash = block.blockhash(0);
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1.0
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5.0
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 2
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Common Weakness Enumeration CWE ID 477
[6] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002617
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-2 Flaw Remediation (P1)
[8] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-2 Flaw Remediation
[9] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.14.6 Configuration Architectural Requirements (L2 L3)
[10] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002610 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002610 CAT II
[12] Standards Mapping - Smart Contract Weakness Classification SWC-111
desc.structural.solidity.swc111